X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Finternal%2Fcodegen%2Fssa%2FSSAClosure.java;h=17c695e518fdcd8b7b94566a6976d0e02645df50;hp=655978890aecc606f8f50b2df15410294f368f9a;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hpb=24e2b34260f219f0d1644ca7a138894980e25b14 diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/SSAClosure.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/SSAClosure.java index 655978890..17c695e51 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/SSAClosure.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/SSAClosure.java @@ -1,108 +1,108 @@ -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 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); - -} +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 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); + +}