Babel.Compiler.TypeElementCreatingVisitor.DefineMethod C# (CSharp) Method

DefineMethod() protected method

protected DefineMethod ( TypeBuilder type, string name, MethodAttributes attributes, TypeData returnType, TypedNodeList arguments ) : MethodBuilder
type System.Reflection.Emit.TypeBuilder
name string
attributes MethodAttributes
returnType TypeData
arguments TypedNodeList
return System.Reflection.Emit.MethodBuilder
        protected virtual MethodBuilder DefineMethod(TypeBuilder type,
                         string name,
                         MethodAttributes attributes,
                         TypeData returnType,
                         TypedNodeList arguments)
        {
            MethodBuilder method =
                type.DefineMethod(name,
                                  attributes,
                                  returnType.RawType,
                                  arguments.NodeTypes);
            ParameterInfo[] parameters = new ParameterInfo[arguments.Length];
            ArrayList parameterList = new ArrayList();
            foreach (Argument arg in arguments) {
                ParameterAttributes attrs = 0;
                switch (arg.Mode) {
                case ArgumentMode.Out:
                    attrs |= ParameterAttributes.Out;
                    break;
                case ArgumentMode.InOut:
                    attrs |= ParameterAttributes.In;
                    attrs |= ParameterAttributes.Out;
                    break;
                }
                ParameterBuilder pb =
                    method.DefineParameter(arg.Index, attrs, arg.Name);
                Type[] cparamTypes = new Type[] { typeof(ArgumentMode) };
                ConstructorInfo constructor =
                    typeof(ArgumentModeAttribute).GetConstructor(cparamTypes);
                CustomAttributeBuilder cbuilder =
                    new CustomAttributeBuilder(constructor,
                                               new object[] { arg.Mode });
                pb.SetCustomAttribute(cbuilder);
                parameters[arg.Index - 1] =
                    new Parameter(pb, arg.NodeType.RawType, method);
                ArgumentModeAttribute attr =
                    new ArgumentModeAttribute(arg.Mode);
                typeManager.AddCustomAttribute(parameters[arg.Index - 1], attr);

                UserDefinedParameterData paramData =
                    new UserDefinedParameterData(typeManager,
                                                 parameters[arg.Index - 1],
                                                 arg.Mode);
                parameterList.Add(paramData);
            }
            UserDefinedMethodData methodData =
                typeManager.AddMethod(type, method);
            typeManager.AddParameters(method, parameters);
            methodData.Parameters = parameterList;
            return method;
        }