public override void Compile(CompileContext context) { MethodInfo newMethod = context.GetMethod(_methodName); base.OverridePreProcess(context, newMethod); }
public override void Compile(CompileContext context) { Type[] argtypes = GetArgTypes(); if (_method == null) { _method = context.GetMethod(_methodName, argtypes); } if (_instance != null) { _instance.Compile(context); } ParameterInfo[] actualParams = _method.GetParameters(); for (int i = 0 ; i< ChildNodes.Count; i++) { Expression exp = (Expression)ChildNodes[i]; exp.Compile(context); if (exp.Type.Equals(typeof(int)) && actualParams[i].ParameterType.Equals(typeof(object))) { context.ILGenerator.Emit(OpCodes.Box, typeof(int)); } if (exp is Variable) { context.ILGenerator.Emit(OpCodes.Unbox_Any, typeof(int)); } } if (_method.IsVirtual) { context.ILGenerator.Emit(OpCodes.Callvirt, _method); } else { context.ILGenerator.Emit(OpCodes.Call, _method); } if (PopReturnValue && _method.ReturnType != typeof(void)) { context.ILGenerator.Emit(OpCodes.Pop); } }