]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/exits/If.java
SCL compiler generates line numbers to bytecode
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / codegen / ssa / exits / If.java
index 4eca7d1aeb35fa851124281175643a0f489025e7..ee69106cdb5f8dccace0220fcee6ebbf9adf0883 100644 (file)
@@ -31,7 +31,8 @@ public class If extends SSAExit implements ValRefBinder {
     private ContRef thenTarget;
     private ContRef elseTarget;
     
-    public If(ValRef condition, ContRef thenTarget, ContRef elseTarget) {
+    public If(int lineNumber, ValRef condition, ContRef thenTarget, ContRef elseTarget) {
+        super(lineNumber);
         setCondition(condition);
         setThenTarget(thenTarget);
         setElseTarget(elseTarget);
@@ -54,6 +55,7 @@ public class If extends SSAExit implements ValRefBinder {
 
     @Override
     public void generateCode(MethodBuilder mb) {
+        mb.lineNumber(lineNumber);
         Val binding = condition.getBinding();
         simplifyTestCode: if(binding instanceof BoundVar) {
             BoundVar boundVar = (BoundVar)binding;
@@ -147,9 +149,11 @@ public class If extends SSAExit implements ValRefBinder {
 
     @Override
     public SSAExit copy(CopyContext context) {
-        return new If(context.copy(condition),
+        If copy = new If(lineNumber,
+                context.copy(condition),
                 context.copy(thenTarget),
                 context.copy(elseTarget));
+        return copy;
     }
     
     @Override
@@ -163,11 +167,11 @@ public class If extends SSAExit implements ValRefBinder {
         if(cond instanceof BooleanConstant) {
             SSAExit newExit;
             if(((BooleanConstant) cond).getValue()) {
-                newExit = new Jump(thenTarget);
+                newExit = new Jump(lineNumber, thenTarget);
                 elseTarget.remove();
             }
             else {
-                newExit = new Jump(elseTarget);
+                newExit = new Jump(lineNumber, elseTarget);
                 thenTarget.remove();
             }
             condition.remove();
@@ -177,7 +181,7 @@ public class If extends SSAExit implements ValRefBinder {
         else if(thenTarget.getBinding() == elseTarget.getBinding()) {
             elseTarget.remove();
             condition.remove();
-            getParent().setExit(new Jump(thenTarget));
+            getParent().setExit(new Jump(lineNumber, thenTarget));
             context.markModified("equal-branches-if");
         }
     }