]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/exits/Throw.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / codegen / ssa / exits / Throw.java
1 package org.simantics.scl.compiler.internal.codegen.ssa.exits;
2
3 import java.util.ArrayList;
4
5 import org.cojen.classfile.TypeDesc;
6 import org.simantics.scl.compiler.internal.codegen.continuations.Cont;
7 import org.simantics.scl.compiler.internal.codegen.continuations.ContRef;
8 import org.simantics.scl.compiler.internal.codegen.references.Val;
9 import org.simantics.scl.compiler.internal.codegen.references.ValRef;
10 import org.simantics.scl.compiler.internal.codegen.ssa.SSABlock;
11 import org.simantics.scl.compiler.internal.codegen.ssa.SSAExit;
12 import org.simantics.scl.compiler.internal.codegen.ssa.SSAFunction;
13 import org.simantics.scl.compiler.internal.codegen.utils.CopyContext;
14 import org.simantics.scl.compiler.internal.codegen.utils.MethodBuilder;
15 import org.simantics.scl.compiler.internal.codegen.utils.PrintingContext;
16 import org.simantics.scl.compiler.internal.codegen.utils.SSAValidationContext;
17 import org.simantics.scl.compiler.types.TVar;
18 import org.simantics.scl.compiler.types.Type;
19
20 public class Throw extends SSAExit {
21
22     private static final TypeDesc RuntimeException = 
23             TypeDesc.forClass(RuntimeException.class);
24     
25     String description;
26     
27     public Throw(String description) {
28         this.description = description;
29     }
30
31     @Override
32     public void toString(PrintingContext context) {
33         context.append("throw\n");
34         //context.append(exception);
35     }
36
37     @Override
38     public void generateCode(MethodBuilder mb) {
39         //mb.push(exception.getBinding());
40         //cb.mapLineNumber(location);
41         mb.newObject(RuntimeException);
42         mb.dup();
43         mb.loadConstant(description);
44         mb.invokeConstructor(RuntimeException, new TypeDesc[] {TypeDesc.STRING});
45         mb.throwObject();
46     }
47
48     @Override
49     public void validate(SSAValidationContext context) {
50     }
51
52     @Override
53     public void destroy() {
54         // TODO
55     }
56
57     @Override
58     public SSAExit copy(CopyContext context) {
59         return new Throw(description);
60     }
61     
62     @Override
63     public void replace(TVar[] vars, Type[] replacements) {
64     }
65
66     @Override
67     public void collectFreeVariables(SSAFunction function,
68             ArrayList<ValRef> vars) {
69     }
70     
71     @Override
72     public Cont addParametersInFrontOf(ContRef contRef, Val[] newParameters, Val[] oldParameters,
73             Cont proxy) {
74         return proxy;
75     }
76
77     @Override
78     public SSABlock[] getSuccessors() {
79         return SSABlock.EMPTY_ARRAY;
80     }
81 }