From 7ce92491335fc43865ef736e6055edd6ff2a14b0 Mon Sep 17 00:00:00 2001 From: Jan Gruteser <jan.gruteser@hhu.de> Date: Fri, 3 Jan 2025 12:23:52 +0100 Subject: [PATCH] add method for isBBuiltInOp check --- .../java/de/tla2b/analysis/PredicateVsExpression.java | 5 +---- src/main/java/de/tla2b/analysis/TypeChecker.java | 10 +++------- src/main/java/de/tla2b/global/BBuiltInOPs.java | 7 +++++++ .../de/tla2b/translation/UsedDefinitionsFinder.java | 6 +----- src/main/java/de/tla2bAst/BAstCreator.java | 7 +++---- src/main/java/de/tla2bAst/ExpressionTranslator.java | 5 +---- 6 files changed, 16 insertions(+), 24 deletions(-) diff --git a/src/main/java/de/tla2b/analysis/PredicateVsExpression.java b/src/main/java/de/tla2b/analysis/PredicateVsExpression.java index 2e4c8fe..a6cf364 100644 --- a/src/main/java/de/tla2b/analysis/PredicateVsExpression.java +++ b/src/main/java/de/tla2b/analysis/PredicateVsExpression.java @@ -8,8 +8,6 @@ import tlc2.tool.BuiltInOPs; import java.util.HashMap; import java.util.Map; -import static de.tla2b.global.TranslationGlobals.STANDARD_MODULES; - public class PredicateVsExpression extends BuiltInOPs implements BBuildIns { private final Map<OpDefNode, DefinitionType> definitionsTypeMap = new HashMap<>(); @@ -80,8 +78,7 @@ public class PredicateVsExpression extends BuiltInOPs implements BBuildIns { private DefinitionType visitUserdefinedOp(OpApplNode s) { OpDefNode def = (OpDefNode) s.getOperator(); - if (BBuiltInOPs.contains(def.getName()) - && STANDARD_MODULES.contains(def.getSource().getOriginallyDefinedInModuleNode().getName().toString())) { + if (BBuiltInOPs.isBBuiltInOp(def)) { switch (BBuiltInOPs.getOpcode(def.getName())) { case B_OPCODE_lt: // < case B_OPCODE_gt: // > diff --git a/src/main/java/de/tla2b/analysis/TypeChecker.java b/src/main/java/de/tla2b/analysis/TypeChecker.java index bae579c..8edc28d 100644 --- a/src/main/java/de/tla2b/analysis/TypeChecker.java +++ b/src/main/java/de/tla2b/analysis/TypeChecker.java @@ -156,12 +156,9 @@ public class TypeChecker extends BuiltInOPs implements BBuildIns, TranslationGlo private void evalDefinitions(OpDefNode[] opDefs) throws TLA2BException { for (OpDefNode def : opDefs) { // Definition in this module - String moduleName1 = def.getOriginallyDefinedInModuleNode().getName().toString(); - String moduleName2 = def.getSource().getOriginallyDefinedInModuleNode().getName().toString(); - - if (STANDARD_MODULES.contains(moduleName1) || STANDARD_MODULES.contains(moduleName2)) { + String moduleName = def.getOriginallyDefinedInModuleNode().getName().toString(); + if (STANDARD_MODULES.contains(moduleName) || BBuiltInOPs.isBBuiltInOp(def)) continue; - } if (usedDefinitions.contains(def) || bDefinitions.contains(def)) visitOpDefNode(def); } @@ -283,8 +280,7 @@ public class TypeChecker extends BuiltInOPs implements BBuildIns, TranslationGlo OpDefNode def = (OpDefNode) n.getOperator(); // Definition is a BBuilt-in definition - String sourceModule = def.getSource().getOriginallyDefinedInModuleNode().getName().toString(); - if (BBuiltInOPs.contains(def.getName()) && STANDARD_MODULES.contains(sourceModule)) { + if (BBuiltInOPs.isBBuiltInOp(def)) { return evalBBuiltIns(n, expected); } diff --git a/src/main/java/de/tla2b/global/BBuiltInOPs.java b/src/main/java/de/tla2b/global/BBuiltInOPs.java index 9d17f8e..60633b2 100644 --- a/src/main/java/de/tla2b/global/BBuiltInOPs.java +++ b/src/main/java/de/tla2b/global/BBuiltInOPs.java @@ -1,10 +1,13 @@ package de.tla2b.global; +import tla2sany.semantic.OpDefNode; import util.UniqueString; import java.util.HashMap; import java.util.Map; +import static de.tla2b.global.TranslationGlobals.STANDARD_MODULES; + public class BBuiltInOPs implements BBuildIns { private static final Map<UniqueString, Integer> B_Opcodes = new HashMap<>(); @@ -61,6 +64,10 @@ public class BBuiltInOPs implements BBuildIns { return B_Opcodes.containsKey(s); } + public static boolean isBBuiltInOp(OpDefNode def) { + return contains(def.getName()) && STANDARD_MODULES.contains(def.getSource().getOriginallyDefinedInModuleNode().getName().toString()); + } + public static int getOpcode(UniqueString s) { return B_Opcodes.get(s); } diff --git a/src/main/java/de/tla2b/translation/UsedDefinitionsFinder.java b/src/main/java/de/tla2b/translation/UsedDefinitionsFinder.java index 67b06eb..a101349 100644 --- a/src/main/java/de/tla2b/translation/UsedDefinitionsFinder.java +++ b/src/main/java/de/tla2b/translation/UsedDefinitionsFinder.java @@ -14,8 +14,6 @@ import java.util.Collection; import java.util.HashSet; import java.util.Set; -import static de.tla2b.global.TranslationGlobals.STANDARD_MODULES; - public class UsedDefinitionsFinder extends AbstractASTVisitor { private final Set<OpDefNode> usedDefinitions = new HashSet<>(); @@ -82,9 +80,7 @@ public class UsedDefinitionsFinder extends AbstractASTVisitor { OpDefNode def = (OpDefNode) n.getOperator(); ModuleNode moduleNode = def.getSource().getOriginallyDefinedInModuleNode(); - if (moduleNode.getName().toString().equals("TLA2B")) - return; - if (BBuiltInOPs.contains(def.getName()) && STANDARD_MODULES.contains(moduleNode.getName().toString())) + if (moduleNode.getName().toString().equals("TLA2B") || BBuiltInOPs.isBBuiltInOp(def)) return; if (usedDefinitions.add(def)) { diff --git a/src/main/java/de/tla2bAst/BAstCreator.java b/src/main/java/de/tla2bAst/BAstCreator.java index e4bdced..89be2a9 100644 --- a/src/main/java/de/tla2bAst/BAstCreator.java +++ b/src/main/java/de/tla2bAst/BAstCreator.java @@ -626,8 +626,8 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals, BBuil private PPredicate visitUserdefinedOpPredicate(OpApplNode n) { OpDefNode def = (OpDefNode) n.getOperator(); - if (BBuiltInOPs.contains(def.getName()) // Operator is a B built-in operator - && STANDARD_MODULES.contains(def.getSource().getOriginallyDefinedInModuleNode().getName().toString())) { + // Operator is a B built-in operator + if (BBuiltInOPs.isBBuiltInOp(def)) { return visitBBuiltInsPredicate(n); } if (specAnalyser.getRecursiveFunctions().contains(def)) { @@ -666,8 +666,7 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals, BBuil private PExpression visitUserdefinedOpExpression(OpApplNode n) { OpDefNode def = (OpDefNode) n.getOperator(); // Operator is a B built-in operator - if (BBuiltInOPs.contains(def.getName()) - && STANDARD_MODULES.contains(def.getSource().getOriginallyDefinedInModuleNode().getName().toString())) { + if (BBuiltInOPs.isBBuiltInOp(def)) { return visitBBuiltInsExpression(n); } diff --git a/src/main/java/de/tla2bAst/ExpressionTranslator.java b/src/main/java/de/tla2bAst/ExpressionTranslator.java index c87b11c..89e8141 100644 --- a/src/main/java/de/tla2bAst/ExpressionTranslator.java +++ b/src/main/java/de/tla2bAst/ExpressionTranslator.java @@ -30,8 +30,6 @@ import java.io.IOException; import java.util.*; import java.util.stream.Collectors; -import static de.tla2b.global.TranslationGlobals.STANDARD_MODULES; - public class ExpressionTranslator implements SyntaxTreeConstants { private final String tlaExpression; @@ -380,8 +378,7 @@ public class ExpressionTranslator implements SyntaxTreeConstants { // nCtx.addSymbolToContext(node.getName(), fromSpec); // this should be redundant and not necessary: // TypeChecker.setType(node, TypeChecker.getType(fromSpec)); - } else if (!(BBuiltInOPs.contains(node.getName()) - && STANDARD_MODULES.contains(node.getSource().getOriginallyDefinedInModuleNode().getName().toString()))) { + } else if (!BBuiltInOPs.isBBuiltInOp(node)) { // throw error if def is not included in translation and not a built-in definition throw new ExpressionTranslationException("Evaluation error:\n" + "Definition '" + fromSpec.getName() + "' is not included in the B translation.\n"); -- GitLab