Boo.Lang.Compiler.Steps.EmitAssembly.DefineMethod C# (CSharp) Метод

DefineMethod() приватный Метод

private DefineMethod ( TypeBuilder typeBuilder, Method method, MethodAttributes attributes ) : MethodBuilder
typeBuilder System.Reflection.Emit.TypeBuilder
method Boo.Lang.Compiler.Ast.Method
attributes MethodAttributes
Результат System.Reflection.Emit.MethodBuilder
        MethodBuilder DefineMethod(TypeBuilder typeBuilder, Method method, MethodAttributes attributes)
        {
            ParameterDeclarationCollection parameters = method.Parameters;

            MethodAttributes methodAttributes = GetMethodAttributes(method) | attributes;

            string name;
            if (method.ExplicitInfo != null)
            {
                name = method.ExplicitInfo.InterfaceType.Name + "." + method.Name;
            }
            else
            {
                name = method.Name;
            }

            MethodBuilder builder = typeBuilder.DefineMethod(name,
                                                             methodAttributes);

            if (method.GenericParameters.Count != 0)
            {
                DefineGenericParameters(builder, method.GenericParameters.ToArray());
            }

            builder.SetParameters(GetParameterTypes(parameters));

            IType returnType = GetEntity(method).ReturnType;
            if (IsPInvoke(method) && TypeSystemServices.IsUnknown(returnType))
            {
                returnType = TypeSystemServices.VoidType;
            }
            builder.SetReturnType(GetSystemType(returnType));

            builder.SetImplementationFlags(ImplementationFlagsFor(method));

            DefineParameters(builder, parameters);

            SetBuilder(method, builder);

            IMethod methodEntity = GetEntity(method);
            if (methodEntity.IsDuckTyped)
            {
                builder.SetCustomAttribute(CreateDuckTypedCustomAttribute());
            }
            return builder;
        }
EmitAssembly