]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/plan/PlanContext.java
SCL compiler generates line numbers to bytecode
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / chr / plan / PlanContext.java
index 2a03c89435e7de85ab9a8ac75a7346b60ca0a45c..62bcfc9581fd9650c4d869c4c0a7b759e423de2a 100644 (file)
@@ -54,15 +54,15 @@ public abstract class PlanContext {
         ICont bodyContinuation = body.getContinuation();
         CodeWriter end = w.createBlock();
                 
-        w.jump(body.getContinuation(), IntegerConstant.ZERO);
+        w.jump(location, body.getContinuation(), IntegerConstant.ZERO);
         
         IVal index = body.getParameters()[0];
-        body.branchAwayIf(body.apply(location, JavaComparisonOperation.IEQUAL, index, listLength),
+        body.branchAwayIf(location, body.apply(location, JavaComparisonOperation.IEQUAL, index, listLength),
                 end.getContinuation());
         variable.setVal(body.apply(location, ListElement.INSTANCE.createSpecialization(componentType), listValue, index));
         nextOp(body);
         if(body.isUnfinished())
-            body.jump(bodyContinuation, body.apply(location, IncreaseByOne.INSTANCE, index));
+            body.jump(location, bodyContinuation, body.apply(location, IncreaseByOne.INSTANCE, index));
         
         w.continueAs(end);
     }
@@ -72,7 +72,7 @@ public abstract class PlanContext {
 
         CodeWriter end = w.createBlock();
         CodeWriter body = w.createBlock(componentType);
-        w.switch_(maybeValue, new Branch[] {
+        w.switch_(location, maybeValue, new Branch[] {
                 new Branch(JustConstant.INSTANCE, body.getContinuation()),
                 new Branch(null, end.getContinuation())
         });
@@ -80,17 +80,17 @@ public abstract class PlanContext {
         variable.setVal(body.getParameters()[0]);
         nextOp(body);
         if(body.isUnfinished())
-            body.jump(end.getContinuation());
+            body.jump(location, end.getContinuation());
         
         w.continueAs(end);
     }
 
     public void check(long location, CodeWriter w, IVal booleanValue) {
         CodeWriter end = w.createBlock();
-        w.branchAwayUnless(booleanValue, end.getContinuation());
+        w.branchAwayUnless(location, booleanValue, end.getContinuation());
         nextOp(w);
         if(w.isUnfinished())
-            w.jump(end.getContinuation());
+            w.jump(location, end.getContinuation());
         w.continueAs(end);
     }
 
@@ -105,16 +105,16 @@ public abstract class PlanContext {
 
         CodeWriter end = w.createBlock();
         CodeWriter body = w.createBlock(componentType);
-        w.switch_(maybeValue, new Branch[] {
+        w.switch_(location, maybeValue, new Branch[] {
                 new Branch(JustConstant.INSTANCE, body.getContinuation()),
                 new Branch(null, end.getContinuation())
         });
-        body.branchAwayUnless(body.apply(location,
+        body.branchAwayUnless(location, body.apply(location,
                 EqualsFunction.INSTANCE.createSpecialization(componentType),
                 value, body.getParameters()[0]), end.getContinuation());
         nextOp(body);
         if(body.isUnfinished())
-            body.jump(end.getContinuation());
+            body.jump(location, end.getContinuation());
         
         w.continueAs(end);
     }