diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/RuleMatchImpl.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/RuleMatchImpl.kt index b0d6681a..a37e6bab 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/RuleMatchImpl.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/RuleMatchImpl.kt @@ -37,14 +37,20 @@ internal class RuleMatchImpl(private val rule: Rule, val meta2logical = HashMap, Logical<*>>() - override fun variable(meta: MetaLogical): Logical = - (meta2logical[meta] ?: subst[meta]?.let { value -> + override fun variable(meta: MetaLogical): Logical { + if (meta2logical.containsKey(meta)) return meta2logical[meta] as Logical + + val logical = subst[meta]?.let { value -> when (value) { is Logical<*> -> value is LogicalOwner -> value.logical() else -> LogicalImpl(meta, value as V) } - } ?: meta.logical().also { logical -> meta2logical[meta] = logical }) as Logical + } ?: meta.logical() + + meta2logical[meta] = logical + return logical as Logical + } }