From 16e0fdf9dd4a1c6182060c5b965995f2c9edd7fd Mon Sep 17 00:00:00 2001 From: Fedor Isakov Date: Tue, 4 May 2021 11:06:19 +0200 Subject: [PATCH] Reactor: fix wrong match on reactivation in propagation rule A propagaition rule must ignore reactivated occurrence. Although it is possible that other occurrences are waiting, and they can be erroneously selected if precautions are not taken. --- .../logic/reactor/core/internal/ReteRuleMatcherImpl.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ReteRuleMatcherImpl.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ReteRuleMatcherImpl.kt index db3234a1..022083f9 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ReteRuleMatcherImpl.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ReteRuleMatcherImpl.kt @@ -423,7 +423,13 @@ internal class ReteRuleMatcherImpl(private var ruleLookup: RuleLookup?, val reactivated = layers.any { it.containsOccurrence(occurrence) } // propagation history - if (propagation && reactivated) return nextGeneration().reset() + if (propagation && reactivated) { + // TODO: need a better way to process occurrences that are activated but ignored + // TODO: introduce a flag on ReteNode? + // TODO: same concerns "unique signatures" and "consumed signatures" + lastIntroduced = occurrence + return nextGeneration().reset() + } var firstAffected = -1 for ((idx, layer) in layers.withIndex()) {