コード例 #1
0
ファイル: Emitter.cs プロジェクト: almeswe/alm
        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();
        }
コード例 #2
0
        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);
        }