]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/exits/Throw2.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 / Throw2.java
1 package org.simantics.scl.compiler.internal.codegen.ssa.exits;
2
3 import java.util.ArrayList;
4
5 import org.simantics.scl.compiler.internal.codegen.continuations.Cont;
6 import org.simantics.scl.compiler.internal.codegen.continuations.ContRef;
7 import org.simantics.scl.compiler.internal.codegen.references.Val;
8 import org.simantics.scl.compiler.internal.codegen.references.ValRef;
9 import org.simantics.scl.compiler.internal.codegen.ssa.SSABlock;
10 import org.simantics.scl.compiler.internal.codegen.ssa.SSAExit;
11 import org.simantics.scl.compiler.internal.codegen.ssa.SSAFunction;
12 import org.simantics.scl.compiler.internal.codegen.utils.CopyContext;
13 import org.simantics.scl.compiler.internal.codegen.utils.MethodBuilder;
14 import org.simantics.scl.compiler.internal.codegen.utils.PrintingContext;
15 import org.simantics.scl.compiler.internal.codegen.utils.SSAValidationContext;
16 import org.simantics.scl.compiler.internal.codegen.utils.ValRefVisitor;
17 import org.simantics.scl.compiler.types.TVar;
18 import org.simantics.scl.compiler.types.Type;
19
20 public class Throw2 extends SSAExit {
21
22     ValRef exception;
23     
24     public Throw2(int lineNumber, ValRef exception) {
25         super(lineNumber);
26         this.exception = exception;
27     }
28
29     @Override
30     public void toString(PrintingContext context) {
31         context.append("throw ");
32         context.append(exception);
33         context.append('\n');
34     }
35
36     @Override
37     public void generateCode(MethodBuilder mb) {
38         mb.lineNumber(lineNumber);
39         mb.pushBoxed(exception.getBinding());
40         mb.throwObject();
41     }
42
43     @Override
44     public void validate(SSAValidationContext context) {
45     }
46
47     @Override
48     public void destroy() {
49         exception.remove();
50     }
51
52     @Override
53     public SSAExit copy(CopyContext context) {
54         return new Throw2(lineNumber, exception.copy());
55     }
56     
57     @Override
58     public void replace(TVar[] vars, Type[] replacements) {
59     }
60
61     @Override
62     public void collectFreeVariables(SSAFunction function,
63             ArrayList<ValRef> vars) {
64     }
65     
66     @Override
67     public Cont addParametersInFrontOf(ContRef contRef, Val[] newParameters, Val[] oldParameters,
68             Cont proxy) {
69         return proxy;
70     }
71
72     @Override
73     public SSABlock[] getSuccessors() {
74         return SSABlock.EMPTY_ARRAY;
75     }
76
77     @Override
78     public void forValRefs(ValRefVisitor visitor) {
79     }
80
81     @Override
82     public void cleanup() {
83     }
84 }