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