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%2FSSAExit.java;h=ae9ad5725a436256b382fbd12853544286c06312;hp=a8e1f20004dd2c130d067c82f65472f07a5411a2;hb=7e3061cfff1ac4f100fd671feccea25841222cb0;hpb=cb5fc8d606d8b322563e9345c441eecfa7f01753 diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/SSAExit.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/SSAExit.java index a8e1f2000..ae9ad5725 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/SSAExit.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/SSAExit.java @@ -1,74 +1,76 @@ -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 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); +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 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(); } \ No newline at end of file