private void Reset() { EIP = 0; TempPool.Clear(); RuntimeStack.Clear(); VarSeg = Generator.VarSeg; DataSegment = new int[Generator.VarSeg.Count]; Initialized = new bool[Generator.VarSeg.Count]; for (int i = 0; i < DataSegment.Length; ++i) { DataSegment[i] = 0; Initialized[i] = false; } }
public object Invoke(RuntimeMethod method, object instance, object[] parameters) { try { var env = environment; var mObjects = stack.ManagedObjects; var esp = stack.StackBase; //push this if (method.HasThis) { StackObject.PushObject(esp, mObjects, instance); esp++; } //check parameters count if (method.ParametersCount != parameters.Length) { throw new ILInvokeException("invoke method {0} parameters count mismatch expected={1} actual={2}", method.Name, method.ParametersCount, parameters.Length); } //push parameters foreach (var parameter in parameters) { StackObject.PushObject(esp, mObjects, parameter); esp++; } bool unhandledException; esp = Execute(method, esp, out unhandledException); if (method.ReturnType == env.Void) { return(null); } return(StackObject.ToObject(esp, env, mObjects)); } finally { stack.Clear(); } }