]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/elaboration/utils/ForcedClosure.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / elaboration / utils / ForcedClosure.java
diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/elaboration/utils/ForcedClosure.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/elaboration/utils/ForcedClosure.java
new file mode 100644 (file)
index 0000000..e965b26
--- /dev/null
@@ -0,0 +1,25 @@
+package org.simantics.scl.compiler.internal.elaboration.utils;\r
+\r
+import org.simantics.scl.compiler.elaboration.expressions.EApply;\r
+import org.simantics.scl.compiler.elaboration.expressions.EApplyType;\r
+import org.simantics.scl.compiler.elaboration.expressions.ELiteral;\r
+import org.simantics.scl.compiler.elaboration.expressions.ESimpleLambda;\r
+import org.simantics.scl.compiler.elaboration.expressions.Expression;\r
+import org.simantics.scl.compiler.elaboration.expressions.Expressions;\r
+import org.simantics.scl.compiler.elaboration.java.ApplyUnit;\r
+import org.simantics.scl.compiler.types.Types;\r
+\r
+public class ForcedClosure {\r
+\r
+    public static Expression forceClosure(Expression expression, boolean doIt) {\r
+        if(!doIt)\r
+            return expression;\r
+        else\r
+            return new EApply(expression.location,\r
+                    expression.getEffect(),\r
+                    new EApplyType(new ELiteral(ApplyUnit.INSTANCE), expression.getType()),\r
+                    new ESimpleLambda(expression.getEffect(),\r
+                            Expressions.newBlankVar(Types.PUNIT), expression));\r
+    }\r
+    \r
+}\r