Пример #1
0
        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);
        }
Пример #2
0
        public object Run(RuntimeState state)
        {
            CodeTreeNode tree = BuildCodeTree(state);

            return(tree.Run(state));
        }