]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/statements/LetApply.java
SCL compiler generates line numbers to bytecode
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / codegen / ssa / statements / LetApply.java
index 2733868cf06d312ac82f0a687840b4ca4a2420ff..b4c2955385954515a8a516d7d4dd855c9a2d20db 100644 (file)
@@ -55,7 +55,7 @@ public class LetApply extends LetStatement implements ValRefBinder {
     }
 
     public void push(MethodBuilder mb) {
-        //mb.getCodeBuilder().mapLineNumber(lineNumber);
+        int oldLineNumber = mb.lineNumber(lineNumber);
         Val f = getFunction().getBinding();
         Val[] ps = ValRef.getBindings(getParameters());
         if(f instanceof Constant) {
@@ -70,11 +70,13 @@ public class LetApply extends LetStatement implements ValRefBinder {
             mb.genericApply(ps.length);
             mb.unbox(target.getType());
         }
+        mb.lineNumber(oldLineNumber);
     }
     
     @Override
     public void generateCode(MethodBuilder mb) {
         if(!target.generateOnFly) {
+            mb.lineNumber(lineNumber);
             push(mb);
             mb.store(target);
         }
@@ -101,6 +103,7 @@ public class LetApply extends LetStatement implements ValRefBinder {
     public void bodyToString(PrintingContext context) {
         if(context.getErrorMarker() == this)
             context.append("!> ");
+        context.append("L" + lineNumber + ": ");
         if(hasEffect()) {
             context.append("<");
             context.append(effect);
@@ -417,8 +420,7 @@ public class LetApply extends LetStatement implements ValRefBinder {
         // Merge blocks        
         thisFunction.mergeBlocks(function);
         
-        headBlock.setExit(new Jump(function.getFirstBlock().createOccurrence(), 
-                parameters));
+        headBlock.setExit(new Jump(lineNumber, function.getFirstBlock().createOccurrence(), parameters));
         function.getReturnCont().replaceWith(tailBlock);
 
         this.function.remove();