// Constructor. internal ConstructorBuilder(TypeBuilder type, String name, MethodAttributes attributes, CallingConventions callingConvention, Type[] parameterTypes) { // Validate the parameters. if (name == null) { throw new ArgumentNullException("name"); } else if (name == String.Empty) { throw new ArgumentException(_("Emit_NameEmpty")); } if ((attributes & MethodAttributes.Static) == 0) { callingConvention |= CallingConventions.HasThis; } if ((attributes & MethodAttributes.Virtual) != 0) { throw new ArgumentException(/* TODO */); } attributes |= MethodAttributes.SpecialName; attributes |= MethodAttributes.RTSpecialName; // Set the internal state. this.type = type; this.numParams = (parameterTypes != null ? parameterTypes.Length : 0); this.ilGenerator = null; this.initLocals = true; // Register this item to be detached later. type.module.assembly.AddDetach(this); // Create the signature. helper = SignatureHelper.GetMethodSigHelper (type.module, callingConvention, (CallingConvention)0, typeof(void), parameterTypes); // Create the constructor method. lock (typeof(AssemblyBuilder)) { this.privateData = MethodBuilder.ClrMethodCreate (((IClrProgramItem)type).ClrHandle, name, attributes, helper.sig); } // Add the constructor to the type for post-processing. type.AddMethod(this); }
// Constructor. internal MethodBuilder(TypeBuilder type, String name, MethodAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] parameterTypes) { // Validate the parameters. if (name == null) { throw new ArgumentNullException("name"); } else if (name == String.Empty) { throw new ArgumentException(_("Emit_NameEmpty")); } if (returnType == null) { returnType = typeof(void); } if ((attributes & MethodAttributes.Static) == 0) { callingConvention |= CallingConventions.HasThis; } else if ((attributes & MethodAttributes.Virtual) != 0) { throw new ArgumentException (_("Emit_BothStaticAndVirtual")); } if ((type.Attributes & TypeAttributes.ClassSemanticsMask) == TypeAttributes.Interface && (attributes & MethodAttributes.SpecialName) == 0) { if ((attributes & (MethodAttributes.Virtual | MethodAttributes.Abstract)) != (MethodAttributes.Virtual | MethodAttributes.Abstract)) { throw new ArgumentException (_("Emit_InterfaceMethodAttrs")); } } // Set the local state. this.type = type; this.bodySet = false; this.initLocals = true; this.explicitBody = null; this.ilGenerator = null; this.returnType = returnType; this.returnBuilder = null; this.numParams = (parameterTypes != null ? parameterTypes.Length : 0); // Register this item to be detached later. type.module.assembly.AddDetach(this); // Create the method signature. helper = SignatureHelper.GetMethodSigHelper (type.module, callingConvention, (CallingConvention)0, returnType, parameterTypes); // Create the method. lock (typeof(AssemblyBuilder)) { this.privateData = ClrMethodCreate (((IClrProgramItem)type).ClrHandle, name, attributes, helper.sig); } // Add the method to the type for post-processing. type.AddMethod(this); }
// Constructor. internal ConstructorBuilder(TypeBuilder type, String name, MethodAttributes attributes, CallingConventions callingConvention, Type[] parameterTypes) { // Validate the parameters. if(name == null) { throw new ArgumentNullException("name"); } else if(name == String.Empty) { throw new ArgumentException(_("Emit_NameEmpty")); } if((attributes & MethodAttributes.Static) == 0) { callingConvention |= CallingConventions.HasThis; } if((attributes & MethodAttributes.Virtual) != 0) { throw new ArgumentException(/* TODO */); } attributes |= MethodAttributes.SpecialName; attributes |= MethodAttributes.RTSpecialName; // Set the internal state. this.type = type; this.numParams = (parameterTypes != null ? parameterTypes.Length : 0); this.ilGenerator = null; this.initLocals = true; // Register this item to be detached later. type.module.assembly.AddDetach(this); // Create the signature. helper = SignatureHelper.GetMethodSigHelper (type.module, callingConvention, (CallingConvention)0, typeof(void), parameterTypes); // Create the constructor method. lock(typeof(AssemblyBuilder)) { this.privateData = MethodBuilder.ClrMethodCreate (((IClrProgramItem)type).ClrHandle, name, attributes, helper.sig); } // Add the constructor to the type for post-processing. type.AddMethod(this); }