// 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); }