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