From b84c29f40a41e480fe327ffc7001fbe8bc1df811 Mon Sep 17 00:00:00 2001
From: hansen <dominik_hansen@web.de>
Date: Mon, 24 Nov 2014 11:30:07 +0100
Subject: [PATCH] Fixed bug in the detection of the used modules procedure

---
 src/main/java/de/tlc4b/TLC4B.java             | 23 +++++++++-
 src/main/java/de/tlc4b/Translator.java        |  3 +-
 .../analysis/NotSupportedConstructs.java      |  1 -
 .../tlc4b/analysis/UsedStandardModules.java   | 15 +++++--
 src/test/java/de/tlc4b/util/TestUtil.java     |  6 ++-
 src/test/java/testing/Testing2.java           | 45 -------------------
 6 files changed, 39 insertions(+), 54 deletions(-)
 delete mode 100644 src/test/java/testing/Testing2.java

diff --git a/src/main/java/de/tlc4b/TLC4B.java b/src/main/java/de/tlc4b/TLC4B.java
index cc283c1..9b8a967 100644
--- a/src/main/java/de/tlc4b/TLC4B.java
+++ b/src/main/java/de/tlc4b/TLC4B.java
@@ -164,7 +164,7 @@ public class TLC4B {
 				index = index + 1;
 				if (index == args.length) {
 					throw new TLC4BIOException(
-							"Error: Number requiered after option '-maxnint'.");
+							"Error: Number requiered after option '-maxint'.");
 				}
 				int maxint = Integer.parseInt(args[index]);
 				TLC4BGlobals.setMAX_INT(maxint);
@@ -424,7 +424,28 @@ public class TLC4B {
 				file.deleteOnExit();
 			}
 		}
+	}
+
+	public static void testParse(String[] args, boolean deleteFiles)
+			throws Exception {
+		TLC4BGlobals.resetGlobals();
+		TLC4BGlobals.setDeleteOnExit(deleteFiles);
+		TLC4BGlobals.setCreateTraceFile(false);
+		TLC4BGlobals.setTestingMode(true);
+		// B2TLAGlobals.setCleanup(true);
+		TLC4B tlc4b = new TLC4B();
+		try {
+			tlc4b.progress(args);
+		} catch (Exception e) {
+			e.printStackTrace();
+			System.err.println(e.getMessage());
+			throw e;
+		}
+		File module = new File(tlc4b.buildDir,
+				tlc4b.machineFileNameWithoutFileExtension + ".tla");
 
+		// parse result
+		new de.tla2bAst.Translator(module.getCanonicalPath());
 	}
 
 }
diff --git a/src/main/java/de/tlc4b/Translator.java b/src/main/java/de/tlc4b/Translator.java
index 7f8aa1c..2f16221 100644
--- a/src/main/java/de/tlc4b/Translator.java
+++ b/src/main/java/de/tlc4b/Translator.java
@@ -110,7 +110,6 @@ public class Translator {
 		UnchangedVariablesFinder unchangedVariablesFinder = new UnchangedVariablesFinder(
 				machineContext);
 
-		
 		ConstantsEliminator constantsEliminator = new ConstantsEliminator(
 				machineContext);
 		constantsEliminator.start();
@@ -126,7 +125,7 @@ public class Translator {
 		
 		DefinitionsAnalyser deferredSetSizeCalculator = new DefinitionsAnalyser(
 				machineContext);
-
+		
 		Generator generator = new Generator(machineContext, typeRestrictor,
 				constantsEvaluator, deferredSetSizeCalculator, typechecker);
 		generator.generate();
diff --git a/src/main/java/de/tlc4b/analysis/NotSupportedConstructs.java b/src/main/java/de/tlc4b/analysis/NotSupportedConstructs.java
index 56372a5..2683892 100644
--- a/src/main/java/de/tlc4b/analysis/NotSupportedConstructs.java
+++ b/src/main/java/de/tlc4b/analysis/NotSupportedConstructs.java
@@ -19,7 +19,6 @@ public class NotSupportedConstructs extends DepthFirstAdapter {
 
 	public NotSupportedConstructs(Start start) {
 		start.apply(this);
-		System.out.println(start.getPParseUnit().getClass());
 	}
 
 	public void inARefinesModelClause(ARefinesModelClause node) {
diff --git a/src/main/java/de/tlc4b/analysis/UsedStandardModules.java b/src/main/java/de/tlc4b/analysis/UsedStandardModules.java
index 19497f2..68b521d 100644
--- a/src/main/java/de/tlc4b/analysis/UsedStandardModules.java
+++ b/src/main/java/de/tlc4b/analysis/UsedStandardModules.java
@@ -388,12 +388,19 @@ public class UsedStandardModules extends DepthFirstAdapter {
 
 	// Function call
 	public void inAFunctionExpression(AFunctionExpression node) {
-		if (!(node.parent() instanceof AAssignSubstitution)) {
-			BType type = typechecker.getType(node.getIdentifier());
-			if (type instanceof SetType) {
-				usedStandardModules.add(STANDARD_MODULES.FunctionsAsRelations);
+		// System.out.println(node.parent().getClass());
+		if (node.parent() instanceof AAssignSubstitution) {
+			AAssignSubstitution parent = (AAssignSubstitution) node.parent();
+			if (parent.getLhsExpression().contains(node)) {
+				// function assignment (function call on the left side), e.g.
+				// f(x) := 1
+				return;
 			}
 		}
+		BType type = typechecker.getType(node.getIdentifier());
+		if (type instanceof SetType) {
+			usedStandardModules.add(STANDARD_MODULES.FunctionsAsRelations);
+		}
 
 	}
 
diff --git a/src/test/java/de/tlc4b/util/TestUtil.java b/src/test/java/de/tlc4b/util/TestUtil.java
index 936163d..6f4343b 100644
--- a/src/test/java/de/tlc4b/util/TestUtil.java
+++ b/src/test/java/de/tlc4b/util/TestUtil.java
@@ -19,8 +19,11 @@ import de.tla2b.exceptions.FrontEndException;
 import de.tla2b.exceptions.TLA2BException;
 import de.tla2b.output.ASTPrettyPrinter;
 import de.tla2b.output.Renamer;
+import de.tlc4b.TLC4B;
 import de.tlc4b.TLC4BGlobals;
+import de.tlc4b.TLCRunner;
 import de.tlc4b.Translator;
+import de.tlc4b.tlc.TLCResults;
 import de.tlc4b.tlc.TLCResults.TLCResult;
 
 public class TestUtil {
@@ -177,7 +180,8 @@ public class TestUtil {
 		System.out.println("No result found.");
 		return null;
 	}
-
+	
+	
 	private static Process startJVM(final String optionsAsString,
 			final String mainClass, final String[] arguments)
 			throws IOException {
diff --git a/src/test/java/testing/Testing2.java b/src/test/java/testing/Testing2.java
deleted file mode 100644
index 925ef7e..0000000
--- a/src/test/java/testing/Testing2.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package testing;
-
-import static de.tlc4b.tlc.TLCResults.TLCResult.NoError;
-import static de.tlc4b.util.TestUtil.test;
-
-import java.io.File;
-import java.util.ArrayList;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import de.tlc4b.TLC4B;
-import de.tlc4b.tlc.TLCResults.TLCResult;
-import de.tlc4b.util.AbstractParseMachineTest;
-import de.tlc4b.util.PolySuite;
-import de.tlc4b.util.TestPair;
-import de.tlc4b.util.PolySuite.Config;
-import de.tlc4b.util.PolySuite.Configuration;
-
-@RunWith(PolySuite.class)
-public class Testing2 extends AbstractParseMachineTest {
-
-	private final File machine;
-
-	public Testing2(File machine, TLCResult result) {
-		this.machine = machine;
-	}
-
-	@Test
-	public void testRunTLC() throws Exception {
-		String[] a = new String[] { machine.getPath(), "-nodead", "-noinv" };
-		//String[] a = new String[] { "./src/test/resources/testing/Counter.mch" };
-		TLC4B.main(a);
-		//TLC4B.test(a, false);
-		// test(a);
-	}
-
-	@Config
-	public static Configuration getConfig() {
-		final ArrayList<TestPair> list = new ArrayList<TestPair>();
-		list.add(new TestPair(NoError, "./src/test/resources/testing"));
-		return getConfiguration(list);
-	}
-
-}
-- 
GitLab