Exemplo n.º 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;
 }
Exemplo n.º 2
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);
        }