]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/utils/MethodBuilder.java
Merged changes from feature/scl to master.
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / codegen / utils / MethodBuilder.java
index d740de293824b33e9241c6addd9bc66eebad46a6..56b5c8e6767141bfae285180962016409a7ed975 100644 (file)
@@ -208,6 +208,9 @@ public class MethodBuilder extends MethodBuilderBase {
         storeLocal(lv);
     }
 
+    /**
+     * Generates the continuation code if it does not already exist.
+     */
     public void ensureExists(Cont continuation) {
         if(!generatedConts.contains(continuation))
             ((SSABlock)continuation).generateCode(this);
@@ -221,4 +224,16 @@ public class MethodBuilder extends MethodBuilderBase {
     public <T> void addPreparation(PreparationStep<T> step, T result) {
         preparationSteps.put(step, result);
     }
+
+    public LocalVariable cacheValue(IVal val, Type type) {
+        if(val instanceof BoundVar) {
+            BoundVar boundVar = (BoundVar)val;
+            if(!boundVar.generateOnFly)
+                return getLocalVariable(boundVar);
+        }
+        push(val, type);
+        LocalVariable temp = createLocalVariable(null, getJavaTypeTranslator().toTypeDesc(type));
+        storeLocal(temp);
+        return temp;
+    }
 }