X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Finternal%2Felaboration%2Futils%2FForcedClosure.java;fp=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Finternal%2Felaboration%2Futils%2FForcedClosure.java;h=e965b26acd82b0086243217109711e703f03c80b;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git 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 index 000000000..e965b26ac --- /dev/null +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/elaboration/utils/ForcedClosure.java @@ -0,0 +1,25 @@ +package org.simantics.scl.compiler.internal.elaboration.utils; + +import org.simantics.scl.compiler.elaboration.expressions.EApply; +import org.simantics.scl.compiler.elaboration.expressions.EApplyType; +import org.simantics.scl.compiler.elaboration.expressions.ELiteral; +import org.simantics.scl.compiler.elaboration.expressions.ESimpleLambda; +import org.simantics.scl.compiler.elaboration.expressions.Expression; +import org.simantics.scl.compiler.elaboration.expressions.Expressions; +import org.simantics.scl.compiler.elaboration.java.ApplyUnit; +import org.simantics.scl.compiler.types.Types; + +public class ForcedClosure { + + public static Expression forceClosure(Expression expression, boolean doIt) { + if(!doIt) + return expression; + else + return new EApply(expression.location, + expression.getEffect(), + new EApplyType(new ELiteral(ApplyUnit.INSTANCE), expression.getType()), + new ESimpleLambda(expression.getEffect(), + Expressions.newBlankVar(Types.PUNIT), expression)); + } + +}