From 6ac5097070ceca90cb1f7b5cbe98d28d26382e59 Mon Sep 17 00:00:00 2001
From: Ludovic Apvrille <ludovic.apvrille@telecom-paristech.fr>
Date: Mon, 20 Feb 2017 12:25:45 +0000
Subject: [PATCH] Resolving bug on infinite loops in TML, issue #24

---
 src/tmltranslator/TMLTextSpecification.java   | 34 ++++++++++++++-----
 .../DiploSimulatorCodeGenerator.java          |  3 ++
 2 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/src/tmltranslator/TMLTextSpecification.java b/src/tmltranslator/TMLTextSpecification.java
index 69525bf9bf..1a4b94fab7 100755
--- a/src/tmltranslator/TMLTextSpecification.java
+++ b/src/tmltranslator/TMLTextSpecification.java
@@ -1515,21 +1515,39 @@ public class TMLTextSpecification {
                 return -1;
             }
             forp = forp.substring(tmp0+1, tmp1);
-            forps = forp.split(";");
-            if (forps.length != 3) {
-                error = "FOR operation: badly formed parameters";
+	    int first = forp.indexOf(";");
+	    String init = "";
+	    if (first > -1) {
+		init = forp.substring(0, first);
+	    } else {
+		error = "FOR operation: badly formed parameters";
                 addError(0, _lineNb, 0, error);
                 return -1;
-            }
+	    }
 
-            // All is ok: constructing the FOR
+	    String condition = "";
+	    String increment = "";
+	    forp = forp.substring(first+1, forp.length()).trim();
+
+	    int second = forp.indexOf(";");
+	    if (second == -1) {
+		error = "FOR operation: badly formed parameters ";
+                addError(0, _lineNb, 0, error);
+                return -1;
+	    }
+
+	    condition = forp.substring(0, second);
+	    increment = forp.substring(second+1, forp.length());
+	    
+	    
+                        // All is ok: constructing the FOR
             parseElt = new TMLParserSaveElt();
             parseElt.type = TMLParserSaveElt.FOR;
             parses.add(0, parseElt);
             TMLForLoop loop = new TMLForLoop("loop", null);
-            loop.setInit(forps[0].trim());
-            loop.setCondition(forps[1].trim());
-            loop.setIncrement(forps[2].trim());
+            loop.setInit(init);
+            loop.setCondition(condition);
+            loop.setIncrement(increment);
             task.getActivityDiagram().addElement(loop);
             parseElt.tmlae = loop;
             tmlae.addNext(loop);
diff --git a/src/tmltranslator/tomappingsystemc2/DiploSimulatorCodeGenerator.java b/src/tmltranslator/tomappingsystemc2/DiploSimulatorCodeGenerator.java
index 9c81cfadf8..af91282a72 100644
--- a/src/tmltranslator/tomappingsystemc2/DiploSimulatorCodeGenerator.java
+++ b/src/tmltranslator/tomappingsystemc2/DiploSimulatorCodeGenerator.java
@@ -108,6 +108,9 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator
 
     DiploSimulatorCodeGenerator(TMLMapping _tmlmapping, List<EBRDD> _ebrdds, List<TEPE> _tepes) {
         tmlmapping = _tmlmapping;
+	if (tmlmapping == null) {
+	    TraceManager.addDev("null mapping");
+	}
         tmlmapping.handleCPs();
         tmlmapping.removeForksAndJoins();
         tmlmapping.makeMinimumMapping();
-- 
GitLab