Welcome to mirror list, hosted at ThFree Co, Russian Federation.

ConstructorBuilder.cs « System.Reflection.Emit « corlib « class « mcs - github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 41ef0dd9ca9f26ba1f7f43f5ee7b8e7643d7b564 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
//
// System.Reflection.Emit/ConstructorBuilder.cs
//
// Author:
//   Paolo Molaro (lupus@ximian.com)
//
// (C) 2001 Ximian, Inc.  http://www.ximian.com
//

using System;
using System.Reflection;
using System.Reflection.Emit;
using System.Globalization;
using System.Security;
using System.Security.Permissions;

namespace System.Reflection.Emit {
	public sealed class ConstructorBuilder : ConstructorInfo {
		private ILGenerator ilgen;
		private Type[] parameters;
		private MethodAttributes attrs;
		private MethodImplAttributes iattrs;
		private int table_idx;
		private CallingConventions call_conv;
		private TypeBuilder type;
		private ParameterBuilder[] pinfo;
		private CustomAttributeBuilder[] cattrs;
		private bool init_locals = true;

		internal ConstructorBuilder (TypeBuilder tb, MethodAttributes attributes, CallingConventions callingConvention, Type[] parameterTypes) {
			attrs = attributes;
			call_conv = callingConvention;
			if (parameterTypes != null) {
				this.parameters = new Type [parameterTypes.Length];
				System.Array.Copy (parameterTypes, this.parameters, parameterTypes.Length);
			}
			type = tb;
			table_idx = get_next_table_index (this, 0x06, true);
		}
		
		public bool InitLocals {
			get {return init_locals;}
			set {init_locals = value;}
		}

		internal TypeBuilder TypeBuilder {
			get {return type;}
		}
		
		public override MethodImplAttributes GetMethodImplementationFlags() {
			return iattrs;
		}
		public override ParameterInfo[] GetParameters() {
			return null;
		}
		public override Object Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) {
			return null;
		}
		public override object Invoke(BindingFlags invokeAttr, Binder binder, object[] parameters, CultureInfo culture) {
			return null;
		}

		public override RuntimeMethodHandle MethodHandle { get {return new RuntimeMethodHandle ();} }
		public override MethodAttributes Attributes { 
			get {return attrs;} 
		}
		public override Type ReflectedType { get {return type;}}
		public override Type DeclaringType { get {return type;}}
		public Type ReturnType { get {return null;}}
		public override string Name { 
			get {return (attrs & MethodAttributes.Static) != 0 ? ".cctor" : ".ctor";}
		}
		public string Signature {
			get {return "constructor signature";}
		}

		public void AddDeclarativeSecurity( SecurityAction action, PermissionSet pset) {
		}

		[MonoTODO]
		public ParameterBuilder DefineParameter(int iSequence, ParameterAttributes attributes, string strParamName)
		{
			ParameterBuilder pb = new ParameterBuilder (this, iSequence, attributes, strParamName);
			// check iSequence
			if (pinfo == null)
				pinfo = new ParameterBuilder [parameters.Length + 1];
			pinfo [iSequence] = pb;
			return pb;
		}

		public override bool IsDefined (Type attribute_type, bool inherit) {return false;}

		public override object [] GetCustomAttributes (bool inherit) {return null;}

		public override object [] GetCustomAttributes (Type attribute_type, bool inherit) {return null;}

		public ILGenerator GetILGenerator () {
			return GetILGenerator (256);
		}
		internal ILGenerator GetILGenerator (int size) {
			ilgen = new ILGenerator (this, size);
			return ilgen;
		}

		public void SetCustomAttribute( CustomAttributeBuilder customBuilder) {
			if (cattrs != null) {
				CustomAttributeBuilder[] new_array = new CustomAttributeBuilder [cattrs.Length + 1];
				cattrs.CopyTo (new_array, 0);
				new_array [cattrs.Length] = customBuilder;
				cattrs = new_array;
			} else {
				cattrs = new CustomAttributeBuilder [1];
				cattrs [0] = customBuilder;
			}
		}
		public void SetCustomAttribute( ConstructorInfo con, byte[] binaryAttribute) {
			SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute));
		}
		public void SetImplementationFlags( MethodImplAttributes attributes) {
			iattrs = attributes;
		}
		public Module GetModule() {
			return null;
		}
		public MethodToken GetToken() {
			return new MethodToken (0x06000000 | table_idx);
		}
		public void SetSymCustomAttribute( string name, byte[] data) {
		}
		public override string ToString() {
			return "constructor";
		}

		internal void fixup () {
			if (ilgen != null)
				ilgen.label_fixup ();
		}
		internal override int get_next_table_index (object obj, int table, bool inc) {
			return type.get_next_table_index (obj, table, inc);
		}

	}
}