From 862f7182ff16e302112d586241c674401e933f7c Mon Sep 17 00:00:00 2001 From: Fedor Isakov Date: Fri, 3 Aug 2018 11:15:37 +0200 Subject: [PATCH] Fix double exec of rule builders. Ensure all rules have unique tags. --- .../src/jetbrains/mps/logic/reactor/core/RuleIndex.kt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/RuleIndex.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/RuleIndex.kt index f362a08c..97195e76 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/RuleIndex.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/RuleIndex.kt @@ -39,11 +39,6 @@ class RuleIndex(handlers: Iterable) : Iterable { private val tag2rule = LinkedHashMap() init { - for (h in handlers) { - for (r in h.rules()) { - tag2rule[r.tag()] = r - } - } buildIndex(handlers) } @@ -64,6 +59,10 @@ class RuleIndex(handlers: Iterable) : Iterable { for (h in handlers) { val primSymbols = h.primarySymbols().toSet() for (r in h.rules()) { + if (tag2rule.containsKey(r.tag())) { + throw IllegalStateException("duplicate rule tag ${r.tag()}") + } + tag2rule[r.tag()] = r for (c in (r.headKept() + r.headReplaced())) { val symbol = c.symbol() if (symbol in primSymbols) {