]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.scl.compiler.internal.elaboration.utils;\r
2 \r
3 import org.simantics.scl.compiler.elaboration.expressions.EApply;\r
4 import org.simantics.scl.compiler.elaboration.expressions.EApplyType;\r
5 import org.simantics.scl.compiler.elaboration.expressions.ELiteral;\r
6 import org.simantics.scl.compiler.elaboration.expressions.ESimpleLambda;\r
7 import org.simantics.scl.compiler.elaboration.expressions.Expression;\r
8 import org.simantics.scl.compiler.elaboration.expressions.Expressions;\r
9 import org.simantics.scl.compiler.elaboration.java.ApplyUnit;\r
10 import org.simantics.scl.compiler.types.Types;\r
11 \r
12 public class ForcedClosure {\r
13 \r
14     public static Expression forceClosure(Expression expression, boolean doIt) {\r
15         if(!doIt)\r
16             return expression;\r
17         else\r
18             return new EApply(expression.location,\r
19                     expression.getEffect(),\r
20                     new EApplyType(new ELiteral(ApplyUnit.INSTANCE), expression.getType()),\r
21                     new ESimpleLambda(expression.getEffect(),\r
22                             Expressions.newBlankVar(Types.PUNIT), expression));\r
23     }\r
24     \r
25 }\r