1 package org.simantics.scl.compiler.internal.codegen.ssa.exits;
3 import java.util.ArrayList;
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;
20 public class Throw2 extends SSAExit {
24 public Throw2(int lineNumber, ValRef exception) {
26 this.exception = exception;
30 public void toString(PrintingContext context) {
31 context.append("throw ");
32 context.append(exception);
37 public void generateCode(MethodBuilder mb) {
38 mb.lineNumber(lineNumber);
39 mb.pushBoxed(exception.getBinding());
44 public void validate(SSAValidationContext context) {
48 public void destroy() {
53 public SSAExit copy(CopyContext context) {
54 return new Throw2(lineNumber, exception.copy());
58 public void replace(TVar[] vars, Type[] replacements) {
62 public void collectFreeVariables(SSAFunction function,
63 ArrayList<ValRef> vars) {
67 public Cont addParametersInFrontOf(ContRef contRef, Val[] newParameters, Val[] oldParameters,
73 public SSABlock[] getSuccessors() {
74 return SSABlock.EMPTY_ARRAY;
78 public void forValRefs(ValRefVisitor visitor) {
82 public void cleanup() {