private static void EmitMethodDeclaration(MethodDeclaration method) { Type[] argumentTypes = CreateTypes(method.GetArgumentsTypes()); MethodBuilder methodBuilder; if (method.IsExternal) { methodBuilder = (MethodBuilder)GetCreatedExternalMethod(method.Name, argumentTypes); } else { methodBuilder = (MethodBuilder)GetCreatedMethod(method.Name, argumentTypes); } ILGenerator methodIL = methodBuilder.GetILGenerator(); EmitMethodArguments(method.Arguments); methodIL.Emit(OpCodes.Nop); if (!method.IsExternal) { EmitEmbeddedStatement(method.Body, methodIL); } MethodLocals.Clear(); MethodArguments.Clear(); }
public bool PushMethod(MethodDeclaration methodDeclaration) { if (!CheckMethod(methodDeclaration.Name, methodDeclaration.GetArgumentsTypes())) { List <TableMethodArgument> tableArgs = new List <TableMethodArgument>(); for (int i = 0; i < methodDeclaration.ArgCount; i++) { tableArgs.Add(new TableMethodArgument(methodDeclaration.Arguments[i].Type)); } Methods.Add(new TableMethod(methodDeclaration.Name, methodDeclaration.ReturnType, tableArgs.ToArray())); return(true); } return(false); }