--- /dev/null
+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