From 2fb1f25d4c807b113f3c64316fceb09029c69e41 Mon Sep 17 00:00:00 2001 From: Fedor Isakov Date: Mon, 6 Nov 2017 16:37:37 +0100 Subject: [PATCH] Minor code cleanup --- .../mps/logic/reactor/core/Matcher.kt | 24 +++++++------------ 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/Matcher.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/Matcher.kt index 57c7f345..2a19661e 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/Matcher.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/Matcher.kt @@ -77,27 +77,21 @@ class Match(val rule: Rule, object : LogicalContext { // invariant: the variables in substitution bindings can only be instances of MetaLogical - val meta2value = substitution.bindings().map { b -> + val meta2subs = substitution.bindings().map { b -> (b.`var`().symbol() as MetaLogical).to(b.term().toValue()) }.toMap(HashMap, Any?>()) val meta2logical = HashMap, Logical<*>>() - override fun variable(metaLogical: MetaLogical): Logical { - if (!meta2logical.containsKey(metaLogical)) { - if (meta2value.containsKey(metaLogical)) { - val value = meta2value[metaLogical] - meta2logical[metaLogical] = when (value) { - is Logical<*> -> value - is LogicalOwner -> value.logical() - else -> LogicalImpl(value) - } - } else { - meta2logical[metaLogical] = metaLogical.logical() + override fun variable(meta: MetaLogical): Logical = + (meta2logical[meta] ?: meta2subs[meta]?.let { value -> + when (value) { + is Logical<*> -> value + is LogicalOwner -> value.logical() + else -> LogicalImpl(value) } - } - return meta2logical[metaLogical] as Logical - } + } ?: meta.logical().also { + logical -> meta2logical[meta] = logical }) as Logical } }