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)); } }