package org.simantics.scl.compiler.internal.interpreted; import org.simantics.scl.runtime.function.FunctionImpl1; import org.simantics.scl.runtime.function.FunctionImpl2; import org.simantics.scl.runtime.function.FunctionImpl3; import org.simantics.scl.runtime.function.FunctionImpl4; import org.simantics.scl.runtime.function.FunctionImplN; public class ILambda implements IExpression { private final int[] inheritedVariableIds; private final int arity; private final int variableBindingsLength; private final IExpression body; public ILambda(int[] inheritedVariableIds, int arity, int variableBindingsLength, IExpression body) { this.inheritedVariableIds = inheritedVariableIds; this.arity = arity; this.variableBindingsLength = variableBindingsLength; this.body = body; } @SuppressWarnings("rawtypes") @Override public Object execute(Object[] variableBindings) { final Object[] inheritedVariableBindings = new Object[inheritedVariableIds.length]; for(int i=0;i "); b.append(body); b.append(')'); return b.toString(); } public String toString(Object[] variableBindings) { StringBuilder sb = new StringBuilder(); appendVariableBindings(sb, variableBindings); sb.append(this.toString()); return sb.toString(); } private static void appendVariableBindings(StringBuilder sb, Object[] variableBindings) { if (variableBindings.length > 0) { sb.append("(let {"); for(int i = 0; i < variableBindings.length; i++) { if (i > 0) sb.append("; "); sb.append("v").append(i).append("=").append(variableBindings[i].toString()); } sb.append("} in "); } } }