import org.simantics.scl.compiler.internal.codegen.ssa.SSAFunction;
import org.simantics.scl.compiler.internal.codegen.ssa.SSAStatement;
import org.simantics.scl.compiler.internal.codegen.ssa.binders.BoundVarBinder;
+import org.simantics.scl.compiler.internal.codegen.ssa.binders.ClosureBinder;
import org.simantics.scl.compiler.internal.codegen.ssa.binders.ValRefBinder;
import org.simantics.scl.compiler.internal.codegen.ssa.exits.Jump;
import org.simantics.scl.compiler.internal.codegen.ssa.exits.Switch;
import org.simantics.scl.compiler.types.Types;
import org.simantics.scl.compiler.types.exceptions.MatchException;
import org.simantics.scl.compiler.types.util.MultiFunction;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class LetApply extends LetStatement implements ValRefBinder {
+ private static final Logger LOGGER = LoggerFactory.getLogger(LetApply.class);
+
private ValRef function;
private ValRef[] parameters;
Type effect;
SSABlock headBlock = getParent();
SSAFunction thisFunction = headBlock.getParent();
- if(thisFunction == function)
- return;
+ {
+ SSAFunction curParent=thisFunction;
+ while(true) {
+ if(curParent == function)
+ return;
+ ClosureBinder binder = curParent.getParent();
+ if(binder == null)
+ break;
+ curParent = binder.getParentFunction();
+ }
+ }
/*System.out.println("--- INLINING -------------------------------");
System.out.println(thisFunction);