private object CallInternal(RuntimeState state, object instance, object[] parameterValues, bool wantRefParams, out bool[] refParams) { if (wantRefParams) { refParams = RefParams; } else { refParams = null; } if (parameterValues.Length != parameters.Count) { throw new Exception("TODO Incorrect number of parameters, " + "expecting " + parameters.Count + " got " + parameterValues.Length); } MethodScope methodScope = new MethodScope( state.Scope, instance); for (int n = 0; n < parameters.Count; n++) { methodScope.SetName(parameters[n], parameterValues[n]); } state.Scope = methodScope; object returned = codeTree.Run(state); state.Scope = methodScope.Parent; for (int n = 0; n < parameters.Count; n++) { parameterValues[n] = methodScope.GetName(parameters[n]); } if (state.Returning == methodScope) { state.Returning = null; } return(returned); }
public object Run(RuntimeState state) { CodeTreeNode tree = BuildCodeTree(state); return(tree.Run(state)); }