]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/writer/RecursiveDefinitionWriter.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / codegen / writer / RecursiveDefinitionWriter.java
1 package org.simantics.scl.compiler.internal.codegen.writer;
2
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;
9
10 public class RecursiveDefinitionWriter {
11     ModuleWriter moduleWriter;
12     LetFunctions let;
13
14     public RecursiveDefinitionWriter(ModuleWriter moduleWriter, LetFunctions let) {
15         this.moduleWriter = moduleWriter;
16         this.let = let;
17     }
18
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);
24         
25         let.addClosure(function);
26         
27         return new CodeWriter(moduleWriter, block);
28     }
29
30     public void setLocation(long loc) {
31         let.setRecursiveGroupLocation(loc);
32     }
33 }