1 package org.simantics.scl.compiler.internal.codegen.writer;
3 import org.simantics.scl.compiler.internal.codegen.references.BoundVar;
4 import org.simantics.scl.compiler.internal.codegen.ssa.SSABlock;
5 import org.simantics.scl.compiler.internal.codegen.ssa.SSAFunction;
6 import org.simantics.scl.compiler.internal.codegen.ssa.statements.LetFunctions;
7 import org.simantics.scl.compiler.types.TVar;
8 import org.simantics.scl.compiler.types.Type;
10 public class RecursiveDefinitionWriter {
11 ModuleWriter moduleWriter;
14 public RecursiveDefinitionWriter(ModuleWriter moduleWriter, LetFunctions let) {
15 this.moduleWriter = moduleWriter;
19 public CodeWriter createFunction(BoundVar target, TVar[] typeParameters, Type effect, Type returnType, Type[] parameterTypes) {
20 SSAFunction function = new SSAFunction(typeParameters, effect, returnType);
21 SSABlock block = new SSABlock(parameterTypes);
22 function.addBlock(block);
23 function.setTarget(target);
25 let.addClosure(function);
27 return new CodeWriter(moduleWriter, block);
30 public void setLocation(long loc) {
31 let.setRecursiveGroupLocation(loc);