private ILGenerator ilgen;
private TypeBuilder type;
private ParameterBuilder[] pinfo;
+ private CustomAttributeBuilder[] cattrs;
+ private MethodInfo override_method;
private string pi_dll;
private string pi_entry;
private CharSet ncharset;
private CallingConvention native_cc;
private CallingConventions call_conv;
+ private bool init_locals = true;
internal MethodBuilder (TypeBuilder tb, string name, MethodAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] parameterTypes) {
this.name = name;
System.Array.Copy (parameterTypes, this.parameters, parameterTypes.Length);
}
type = tb;
- table_idx = get_next_table_index (0x06, true);
+ table_idx = get_next_table_index (this, 0x06, true);
+ //Console.WriteLine ("index for "+name+" set to "+table_idx.ToString());
}
internal MethodBuilder (TypeBuilder tb, string name, MethodAttributes attributes,
ncharset = nativeCharset;
}
+ public bool InitLocals {
+ get {return init_locals;}
+ set {init_locals = value;}
+ }
+
internal TypeBuilder TypeBuilder {
get {return type;}
}
return iattrs;
}
public override ParameterInfo[] GetParameters() {
- return null;
+ if ((parameters == null) || (pinfo == null))
+ return null;
+
+ ParameterInfo[] retval = new ParameterInfo [parameters.Length];
+ for (int i = 1; i < parameters.Length + 1; i++) {
+ if (pinfo [i] == null)
+ return null;
+
+ retval [i - 1] = new ParameterInfo (pinfo [i], parameters [i - 1], this);
+ }
+
+ return retval;
}
public void CreateMethodBody( byte[] il, int count) {
ilgen = new ILGenerator (this, size);
return ilgen;
}
-
- public ParameterBuilder DefineParameter( int position, ParameterAttributes attributes, string strParamName) {
+
+ [MonoTODO]
+ public ParameterBuilder DefineParameter (int position, ParameterAttributes attributes, string strParamName)
+ {
ParameterBuilder pb = new ParameterBuilder (this, position, attributes, strParamName);
- /* FIXME: add it to pinfo */
+ // check position
+ if (pinfo == null)
+ pinfo = new ParameterBuilder [parameters.Length + 1];
+ pinfo [position] = pb;
return pb;
}
}
public void SetCustomAttribute( CustomAttributeBuilder customBuilder) {
+ string attrname = customBuilder.Ctor.ReflectedType.FullName;
+ if (attrname == "System.Runtime.CompilerServices.MethodImplAttribute") {
+ byte[] data = customBuilder.Data;
+ int impla; // the (stupid) ctor takes a short or an int ...
+ impla = (int)data [2];
+ impla |= ((int)data [3]) << 8;
+ SetImplementationFlags ((MethodImplAttributes)impla);
+ return;
+ }
+ 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;
}
- internal override int get_next_table_index (int table, bool inc) {
- return type.get_next_table_index (table, inc);
+ internal override int get_next_table_index (object obj, int table, bool inc) {
+ return type.get_next_table_index (obj, table, inc);
+ }
+
+ internal void set_override (MethodInfo mdecl) {
+ override_method = mdecl;
}
}
}