1 package org.simantics.scl.compiler.internal.interpreted;
3 import org.simantics.scl.runtime.function.Function;
5 public class IApply implements IExpression {
6 private final IExpression function;
7 private final IExpression[] parameters;
9 public IApply(IExpression function, IExpression[] parameters) {
10 if(function instanceof IApply) {
11 IApply apply = (IApply)function;
12 this.function = apply.function;
13 this.parameters = new IExpression[apply.parameters.length + parameters.length];
14 System.arraycopy(apply.parameters, 0, this.parameters, 0, apply.parameters.length);
15 System.arraycopy(parameters, 0, this.parameters, apply.parameters.length, parameters.length);
18 this.function = function;
19 this.parameters = parameters;
23 @SuppressWarnings("rawtypes")
25 public Object execute(Object[] variableBindings) {
26 Object[] parameterValues = new Object[parameters.length];
27 for(int i=0;i<parameters.length;++i)
28 parameterValues[i] = parameters[i].execute(variableBindings);
29 return ((Function)function.execute(variableBindings)).applyArray(parameterValues);
33 public String toString() {
34 StringBuilder b = new StringBuilder();
37 for(IExpression parameter : parameters) {