-package org.simantics.scl.compiler.internal.codegen.ssa;\r
-\r
-import java.util.ArrayList;\r
-\r
-import org.simantics.scl.compiler.common.exceptions.InternalCompilerError;\r
-import org.simantics.scl.compiler.constants.Constant;\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.binders.BoundVarBinder;\r
-import org.simantics.scl.compiler.internal.codegen.ssa.binders.ClosureBinder;\r
-import org.simantics.scl.compiler.internal.codegen.utils.CopyContext;\r
-import org.simantics.scl.compiler.internal.codegen.utils.ModuleBuilder;\r
-import org.simantics.scl.compiler.internal.codegen.utils.Printable;\r
-import org.simantics.scl.compiler.internal.codegen.utils.SSALambdaLiftingContext;\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
-\r
-public abstract class SSAClosure implements Printable, BoundVarBinder{ \r
- Val target;\r
- \r
- ClosureBinder parent;\r
- SSAClosure prev;\r
- SSAClosure next;\r
- \r
- public void setParent(ClosureBinder parent) {\r
- this.parent = parent;\r
- }\r
-\r
- public SSAClosure getNext() {\r
- return next;\r
- }\r
-\r
- public void setPrev(SSAClosure function) {\r
- this.prev = function;\r
- }\r
-\r
- public void setNext(SSAClosure function) {\r
- this.next = function;\r
- }\r
-\r
- public SSAFunction getParentFunction() {\r
- return parent.getParentFunction();\r
- }\r
- \r
- public ClosureBinder getParent() {\r
- return parent;\r
- }\r
-\r
- public Val getTarget() {\r
- return target;\r
- }\r
- \r
- public void setTarget(Val target) {\r
- this.target = target;\r
- if(target instanceof BoundVar)\r
- ((BoundVar) target).parent = this; \r
- }\r
- \r
- public void setTarget(BoundVar target) {\r
- this.target = target;\r
- target.parent = this; \r
- }\r
- \r
- public void detach() {\r
- if(prev == null)\r
- parent.setFirstClosure(next);\r
- else\r
- prev.next = next;\r
- if(next != null)\r
- next.prev = prev;\r
- }\r
- \r
- public void remove() {\r
- destroy();\r
- detach();\r
- }\r
-\r
- public SSAClosure copy() {\r
- return copy(new CopyContext());\r
- }\r
- \r
- public abstract void destroy();\r
- public abstract SSAClosure copy(CopyContext context);\r
- public abstract void markGenerateOnFly();\r
- public abstract void replace(TVar[] vars, Type[] replacements);\r
- public abstract void collectFreeVariables(ArrayList<ValRef> freeVars);\r
- public abstract void simplify(SSASimplificationContext context);\r
- public abstract void validate(SSAValidationContext context);\r
- public abstract void lambdaLift(SSALambdaLiftingContext context);\r
- public abstract boolean isValue();\r
- public abstract Type getType();\r
- public abstract void parametrize(BoundVar[] parameters);\r
-\r
- public Constant liftClosure(BoundVar newTarget, BoundVar[] newVarsList) {\r
- throw new InternalCompilerError("Unsupported method liftClosure");\r
- }\r
-\r
- public void generateCode(ModuleBuilder moduleBuilder) {\r
- throw new InternalCompilerError("Unsupported method generateCode");\r
- }\r
-\r
- public abstract void forValRefs(ValRefVisitor visitor);\r
- \r
-}\r
+package org.simantics.scl.compiler.internal.codegen.ssa;
+
+import java.util.ArrayList;
+
+import org.simantics.scl.compiler.common.exceptions.InternalCompilerError;
+import org.simantics.scl.compiler.constants.Constant;
+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.binders.BoundVarBinder;
+import org.simantics.scl.compiler.internal.codegen.ssa.binders.ClosureBinder;
+import org.simantics.scl.compiler.internal.codegen.utils.CopyContext;
+import org.simantics.scl.compiler.internal.codegen.utils.ModuleBuilder;
+import org.simantics.scl.compiler.internal.codegen.utils.Printable;
+import org.simantics.scl.compiler.internal.codegen.utils.SSALambdaLiftingContext;
+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;
+
+public abstract class SSAClosure implements Printable, BoundVarBinder {
+ Val target;
+
+ ClosureBinder parent;
+ SSAClosure prev;
+ SSAClosure next;
+
+ public void setParent(ClosureBinder parent) {
+ this.parent = parent;
+ }
+
+ public SSAClosure getNext() {
+ return next;
+ }
+
+ public void setPrev(SSAClosure function) {
+ this.prev = function;
+ }
+
+ public void setNext(SSAClosure function) {
+ this.next = function;
+ }
+
+ public SSAFunction getParentFunction() {
+ return parent.getParentFunction();
+ }
+
+ public ClosureBinder getParent() {
+ return parent;
+ }
+
+ public Val getTarget() {
+ return target;
+ }
+
+ public void setTarget(Val target) {
+ this.target = target;
+ if(target instanceof BoundVar)
+ ((BoundVar) target).parent = this;
+ }
+
+ public void setTarget(BoundVar target) {
+ this.target = target;
+ target.parent = this;
+ }
+
+ public void detach() {
+ if(prev == null)
+ parent.setFirstClosure(next);
+ else
+ prev.next = next;
+ if(next != null)
+ next.prev = prev;
+ }
+
+ public void remove() {
+ destroy();
+ detach();
+ }
+
+ public SSAClosure copy() {
+ return copy(new CopyContext());
+ }
+
+ public abstract void destroy();
+ public abstract SSAClosure copy(CopyContext context);
+ public abstract void markGenerateOnFly();
+ public abstract void replace(TVar[] vars, Type[] replacements);
+ public abstract void collectFreeVariables(ArrayList<ValRef> freeVars);
+ public abstract void simplify(SSASimplificationContext context);
+ public abstract void validate(SSAValidationContext context);
+ public abstract void lambdaLift(SSALambdaLiftingContext context);
+ public abstract boolean isValue();
+ public abstract Type getType();
+ public abstract void parametrize(BoundVar[] parameters);
+
+ public Constant liftClosure(BoundVar newTarget, BoundVar[] newVarsList) {
+ throw new InternalCompilerError("Unsupported method liftClosure");
+ }
+
+ public void generateCode(ModuleBuilder moduleBuilder) {
+ throw new InternalCompilerError("Unsupported method generateCode");
+ }
+
+ public abstract void forValRefs(ValRefVisitor visitor);
+
+ public abstract void cleanup();
+
+}