]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/exits/Throw.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 / Throw.java
index 730463ab25d1ca6016be54533714fe6112bfe65c..0193c99c2368fd8a690607438646f76e4bdad1ce 100644 (file)
@@ -15,6 +15,7 @@ import org.simantics.scl.compiler.internal.codegen.utils.CopyContext;
 import org.simantics.scl.compiler.internal.codegen.utils.MethodBuilder;
 import org.simantics.scl.compiler.internal.codegen.utils.PrintingContext;
 import org.simantics.scl.compiler.internal.codegen.utils.SSAValidationContext;
+import org.simantics.scl.compiler.internal.codegen.utils.ValRefVisitor;
 import org.simantics.scl.compiler.types.TVar;
 import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.runtime.exceptions.MatchingException;
@@ -29,7 +30,8 @@ public class Throw extends SSAExit {
     TypeDesc exceptionClass;
     String description;
     
-    public Throw(TypeDesc exceptionClass, String description) {
+    public Throw(int lineNumber, TypeDesc exceptionClass, String description) {
+        super(lineNumber);
         this.exceptionClass = exceptionClass;
         this.description = description;
     }
@@ -42,8 +44,7 @@ public class Throw extends SSAExit {
 
     @Override
     public void generateCode(MethodBuilder mb) {
-        //mb.push(exception.getBinding());
-        //cb.mapLineNumber(location);
+        mb.lineNumber(lineNumber);
         mb.newObject(exceptionClass);
         mb.dup();
         if(description == null)
@@ -66,7 +67,7 @@ public class Throw extends SSAExit {
 
     @Override
     public SSAExit copy(CopyContext context) {
-        return new Throw(exceptionClass, description);
+        return new Throw(lineNumber, exceptionClass, description);
     }
     
     @Override
@@ -88,4 +89,12 @@ public class Throw extends SSAExit {
     public SSABlock[] getSuccessors() {
         return SSABlock.EMPTY_ARRAY;
     }
+
+    @Override
+    public void forValRefs(ValRefVisitor visitor) {
+    }
+
+    @Override
+    public void cleanup() {
+    }
 }