2 // System.Reflection.Emit/ConstructorBuilder.cs
5 // Paolo Molaro (lupus@ximian.com)
7 // (C) 2001 Ximian, Inc. http://www.ximian.com
11 using System.Reflection;
12 using System.Reflection.Emit;
13 using System.Globalization;
14 using System.Security;
15 using System.Security.Permissions;
17 namespace System.Reflection.Emit {
18 public sealed class ConstructorBuilder : ConstructorInfo {
19 private ILGenerator ilgen;
20 private Type[] parameters;
21 private MethodAttributes attrs;
22 private MethodImplAttributes iattrs;
23 private int table_idx;
24 private CallingConventions call_conv;
25 private TypeBuilder type;
26 private ParameterBuilder[] pinfo;
27 private CustomAttributeBuilder[] cattrs;
29 internal ConstructorBuilder (TypeBuilder tb, MethodAttributes attributes, CallingConventions callingConvention, Type[] parameterTypes) {
31 call_conv = callingConvention;
32 if (parameterTypes != null) {
33 this.parameters = new Type [parameterTypes.Length];
34 System.Array.Copy (parameterTypes, this.parameters, parameterTypes.Length);
37 table_idx = get_next_table_index (0x06, true);
40 internal TypeBuilder TypeBuilder {
44 public override MethodImplAttributes GetMethodImplementationFlags() {
47 public override ParameterInfo[] GetParameters() {
50 public override Object Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) {
53 public override object Invoke(BindingFlags invokeAttr, Binder binder, object[] parameters, CultureInfo culture) {
57 public override RuntimeMethodHandle MethodHandle { get {return new RuntimeMethodHandle ();} }
58 public override MethodAttributes Attributes {
61 public override Type ReflectedType { get {return type;}}
62 public override Type DeclaringType { get {return type;}}
63 public Type ReturnType { get {return null;}}
64 public override string Name {
65 get {return (attrs & MethodAttributes.Static) != 0 ? ".cctor" : ".ctor";}
67 public string Signature {
68 get {return "constructor signature";}
72 public bool InitLocals { /* FIXME */
77 public void AddDeclarativeSecurity( SecurityAction action, PermissionSet pset) {
81 public ParameterBuilder DefineParameter(int iSequence, ParameterAttributes attributes, string strParamName)
83 ParameterBuilder pb = new ParameterBuilder (this, iSequence, attributes, strParamName);
86 pinfo = new ParameterBuilder [parameters.Length + 1];
87 pinfo [iSequence] = pb;
91 public override bool IsDefined (Type attribute_type, bool inherit) {return false;}
93 public override object [] GetCustomAttributes (bool inherit) {return null;}
95 public override object [] GetCustomAttributes (Type attribute_type, bool inherit) {return null;}
97 public ILGenerator GetILGenerator () {
98 return GetILGenerator (256);
100 public ILGenerator GetILGenerator (int size) {
101 ilgen = new ILGenerator (this, size);
105 public void SetCustomAttribute( CustomAttributeBuilder customBuilder) {
106 if (cattrs != null) {
107 CustomAttributeBuilder[] new_array = new CustomAttributeBuilder [cattrs.Length + 1];
108 cattrs.CopyTo (new_array, 0);
109 new_array [cattrs.Length] = customBuilder;
112 cattrs = new CustomAttributeBuilder [1];
113 cattrs [0] = customBuilder;
116 public void SetCustomAttribute( ConstructorInfo con, byte[] binaryAttribute) {
117 SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute));
119 public void SetImplementationFlags( MethodImplAttributes attributes) {
122 public Module GetModule() {
125 public MethodToken GetToken() {
126 return new MethodToken (0x06000000 | table_idx);
128 public void SetSymCustomAttribute( string name, byte[] data) {
130 public override string ToString() {
131 return "constructor";
134 internal void fixup () {
136 ilgen.label_fixup ();
138 internal override int get_next_table_index (int table, bool inc) {
139 return type.get_next_table_index (table, inc);