]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/SSAClosure.java
(refs #7250) CHR rules modularization (first working version)
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / codegen / ssa / SSAClosure.java
index 655978890aecc606f8f50b2df15410294f368f9a..57748b284b436c727109433613296de9e6910148 100644 (file)
-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);
+    
+}