-package org.simantics.scl.compiler.internal.codegen.ssa;\r
-\r
-import java.util.ArrayList;\r
-\r
-import org.simantics.scl.compiler.internal.codegen.continuations.Cont;\r
-import org.simantics.scl.compiler.internal.codegen.continuations.ContRef;\r
-import org.simantics.scl.compiler.internal.codegen.references.BoundVar;\r
-import org.simantics.scl.compiler.internal.codegen.references.Val;\r
-import org.simantics.scl.compiler.internal.codegen.references.ValRef;\r
-import org.simantics.scl.compiler.internal.codegen.ssa.statements.LetApply;\r
-import org.simantics.scl.compiler.internal.codegen.utils.CopyContext;\r
-import org.simantics.scl.compiler.internal.codegen.utils.MethodBuilder;\r
-import org.simantics.scl.compiler.internal.codegen.utils.Printable;\r
-import org.simantics.scl.compiler.internal.codegen.utils.PrintingContext;\r
-import org.simantics.scl.compiler.internal.codegen.utils.SSASimplificationContext;\r
-import org.simantics.scl.compiler.internal.codegen.utils.SSAValidationContext;\r
-import org.simantics.scl.compiler.internal.codegen.utils.ValRefVisitor;\r
-import org.simantics.scl.compiler.types.TVar;\r
-import org.simantics.scl.compiler.types.Type;\r
-import org.simantics.scl.compiler.types.Types;\r
-\r
-\r
-public abstract class SSAExit implements Printable {\r
- SSABlock parent;\r
- public long location;\r
-\r
- public abstract void generateCode(MethodBuilder mb);\r
-\r
- public abstract void validate(SSAValidationContext context);\r
-\r
- public void simplify(SSASimplificationContext context) {\r
- }\r
-\r
- public abstract void destroy();\r
- \r
- @Override\r
- public String toString() {\r
- PrintingContext context = new PrintingContext();\r
- toString(context);\r
- return context.toString();\r
- }\r
- \r
- public SSABlock getParent() {\r
- return parent;\r
- }\r
-\r
- public abstract SSAExit copy(CopyContext context);\r
- public abstract void replace(TVar[] vars, Type[] replacements);\r
-\r
- public abstract void collectFreeVariables(SSAFunction function, ArrayList<ValRef> vars);\r
-\r
- public abstract Cont addParametersInFrontOf(ContRef contRef, Val[] newParameters, Val[] oldParameters, Cont proxy);\r
- \r
- public SSAFunction getParentFunction() {\r
- return parent.parent;\r
- }\r
- \r
- public void replaceByApply(ValRef valRef, Val function, Type[] typeParameters, Val[] parameters) {\r
- BoundVar target = new BoundVar(valRef.getBinding().getType());\r
- parent.addStatement(new LetApply(target, Types.NO_EFFECTS, function.createOccurrence(typeParameters), ValRef.createOccurrences(parameters)));\r
- valRef.replaceBy(target);\r
- }\r
-\r
- public boolean isJump(Cont cont, Val parameter) { \r
- return false;\r
- }\r
- \r
- public abstract SSABlock[] getSuccessors();\r
-\r
- public void prepare(MethodBuilder mb) {\r
- }\r
-\r
- public abstract void forValRefs(ValRefVisitor visitor);\r
+package org.simantics.scl.compiler.internal.codegen.ssa;
+
+import java.util.ArrayList;
+
+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.BoundVar;
+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.statements.LetApply;
+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.Printable;
+import org.simantics.scl.compiler.internal.codegen.utils.PrintingContext;
+import org.simantics.scl.compiler.internal.codegen.utils.SSASimplificationContext;
+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.compiler.types.Types;
+
+
+public abstract class SSAExit implements Printable {
+ SSABlock parent;
+ public long location;
+
+ public abstract void generateCode(MethodBuilder mb);
+
+ public abstract void validate(SSAValidationContext context);
+
+ public void simplify(SSASimplificationContext context) {
+ }
+
+ public abstract void destroy();
+
+ @Override
+ public String toString() {
+ PrintingContext context = new PrintingContext();
+ toString(context);
+ return context.toString();
+ }
+
+ public SSABlock getParent() {
+ return parent;
+ }
+
+ public abstract SSAExit copy(CopyContext context);
+ public abstract void replace(TVar[] vars, Type[] replacements);
+
+ public abstract void collectFreeVariables(SSAFunction function, ArrayList<ValRef> vars);
+
+ public abstract Cont addParametersInFrontOf(ContRef contRef, Val[] newParameters, Val[] oldParameters, Cont proxy);
+
+ public SSAFunction getParentFunction() {
+ return parent.parent;
+ }
+
+ public void replaceByApply(ValRef valRef, Val function, Type[] typeParameters, Val[] parameters) {
+ BoundVar target = new BoundVar(valRef.getBinding().getType());
+ parent.addStatement(new LetApply(target, Types.NO_EFFECTS, function.createOccurrence(typeParameters), ValRef.createOccurrences(parameters)));
+ valRef.replaceBy(target);
+ }
+
+ public boolean isJump(Cont cont, Val parameter) {
+ return false;
+ }
+
+ public abstract SSABlock[] getSuccessors();
+
+ public void prepare(MethodBuilder mb) {
+ }
+
+ public abstract void forValRefs(ValRefVisitor visitor);
+
+ public abstract void cleanup();