--- /dev/null
+package org.simantics.scl.compiler.internal.codegen.ssa.exits;
+
+import java.util.ArrayList;
+
+import org.cojen.classfile.TypeDesc;
+import org.simantics.scl.compiler.internal.codegen.continuations.Cont;
+import org.simantics.scl.compiler.internal.codegen.continuations.ContRef;
+import org.simantics.scl.compiler.internal.codegen.references.Val;
+import org.simantics.scl.compiler.internal.codegen.references.ValRef;
+import org.simantics.scl.compiler.internal.codegen.ssa.SSABlock;
+import org.simantics.scl.compiler.internal.codegen.ssa.SSAExit;
+import org.simantics.scl.compiler.internal.codegen.ssa.SSAFunction;
+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.types.TVar;
+import org.simantics.scl.compiler.types.Type;
+
+public class Throw extends SSAExit {
+
+ private static final TypeDesc RuntimeException =
+ TypeDesc.forClass(RuntimeException.class);
+
+ String description;
+
+ public Throw(String description) {
+ this.description = description;
+ }
+
+ @Override
+ public void toString(PrintingContext context) {
+ context.append("throw\n");
+ //context.append(exception);
+ }
+
+ @Override
+ public void generateCode(MethodBuilder mb) {
+ //mb.push(exception.getBinding());
+ //cb.mapLineNumber(location);
+ mb.newObject(RuntimeException);
+ mb.dup();
+ mb.loadConstant(description);
+ mb.invokeConstructor(RuntimeException, new TypeDesc[] {TypeDesc.STRING});
+ mb.throwObject();
+ }
+
+ @Override
+ public void validate(SSAValidationContext context) {
+ }
+
+ @Override
+ public void destroy() {
+ // TODO
+ }
+
+ @Override
+ public SSAExit copy(CopyContext context) {
+ return new Throw(description);
+ }
+
+ @Override
+ public void replace(TVar[] vars, Type[] replacements) {
+ }
+
+ @Override
+ public void collectFreeVariables(SSAFunction function,
+ ArrayList<ValRef> vars) {
+ }
+
+ @Override
+ public Cont addParametersInFrontOf(ContRef contRef, Val[] newParameters, Val[] oldParameters,
+ Cont proxy) {
+ return proxy;
+ }
+
+ @Override
+ public SSABlock[] getSuccessors() {
+ return SSABlock.EMPTY_ARRAY;
+ }
+}