package org.simantics.scl.compiler.internal.codegen.writer; import org.simantics.scl.compiler.internal.codegen.references.BoundVar; import org.simantics.scl.compiler.internal.codegen.ssa.SSABlock; import org.simantics.scl.compiler.internal.codegen.ssa.SSAFunction; import org.simantics.scl.compiler.internal.codegen.ssa.statements.LetFunctions; import org.simantics.scl.compiler.types.TVar; import org.simantics.scl.compiler.types.Type; public class RecursiveDefinitionWriter { ModuleWriter moduleWriter; LetFunctions let; public RecursiveDefinitionWriter(ModuleWriter moduleWriter, LetFunctions let) { this.moduleWriter = moduleWriter; this.let = let; } public CodeWriter createFunction(BoundVar target, TVar[] typeParameters, Type effect, Type returnType, Type[] parameterTypes) { SSAFunction function = new SSAFunction(typeParameters, effect, returnType); SSABlock block = new SSABlock(parameterTypes); function.addBlock(block); function.setTarget(target); let.addFunction(function); return new CodeWriter(moduleWriter, block); } public void setLocation(long loc) { let.setRecursiveGroupLocation(loc); } }