-2003-10-13 Zoltan Varga <vargaz@freemail.hu>
+2003-10-13 Martin Baulig <martin@ximian.com>
- * OpCode.cs: Fix Value property. Fixes #49328.
+ * MethodBuilder.cs (MethodBuilder): Added
+ `TypeBuilder.MonoGenericParam[] generic_params' field.
+ (DefineGenericParameter, SetGenericMethodSignature): New public methods.
-2003-10-10 Martin Baulig <martin@ximian.com>
+ * TypeBuilder.cs (DefineGenericMethod): New public method.
- * TypeBuilder.cs (TypeBuilder.MonoGenericParam): Added `index' field.
- (TypeBuilder.DefineGenericParameter): Added overloaded version
- taking an `int index' argument for generic methods.
+2003-10-13 Zoltan Varga <vargaz@freemail.hu>
+
+ * OpCode.cs: Fix Value property. Fixes #49328.
2003-10-03 Zoltan Varga <vargaz@freemail.hu>
private CallingConvention native_cc;
private CallingConventions call_conv;
private bool init_locals = true;
+ private TypeBuilder.MonoGenericParam[] generic_params;
internal MethodBuilder (TypeBuilder tb, string name, MethodAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] parameterTypes) {
this.name = name;
private Exception NotSupported () {
return new NotSupportedException ("The invoked member is not supported in a dynamic module.");
}
+
+#if GENERICS
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private extern static Type define_generic_parameter (MethodBuilder tb, TypeBuilder.MonoGenericParam param);
+
+ public Type DefineGenericParameter (string name, Type[] constraints)
+ {
+ TypeBuilder.MonoGenericParam gparam = new TypeBuilder.MonoGenericParam (name, constraints);
+
+ if (generic_params != null) {
+ TypeBuilder.MonoGenericParam[] new_generic_params = new TypeBuilder.MonoGenericParam [generic_params.Length+1];
+ System.Array.Copy (generic_params, new_generic_params, generic_params.Length);
+ new_generic_params [generic_params.Length] = gparam;
+ generic_params = new_generic_params;
+ } else {
+ generic_params = new TypeBuilder.MonoGenericParam [1];
+ generic_params [0] = gparam;
+ }
+
+ return define_generic_parameter (this, gparam);
+ }
+
+ public void SetGenericMethodSignature (Type return_type, Type[] parameter_types)
+ {
+ RejectIfCreated ();
+
+ this.rtype = return_type;
+ this.parameters = new Type [parameter_types.Length];
+ System.Array.Copy (parameter_types, this.parameters, parameter_types.Length);
+ }
+#endif
}
}
return define_generic_parameter (this, gparam);
}
- /*
- * This is used for generic methods; since TypeBuilder.DefineMethod() takes the parameter
- * types as arguments, we need to create the type parameters before getting the
- * MehtodBuilder.
- */
- public Type DefineGenericParameter (string name, int index, Type[] constraints)
+ public MethodBuilder DefineGenericMethod (string name, MethodAttributes attributes)
{
- MonoGenericParam gparam = new MonoGenericParam (name, index, constraints);
-
- return define_generic_parameter (this, gparam);
+ return DefineMethod (name, attributes, CallingConventions.Standard, null, null);
}
#endif
private readonly uint Handle;
public readonly Type Type;
- public readonly int Index;
public readonly string Name;
public readonly int Flags;
public readonly Type[] Constraints;
{
this.Name = name;
this.Constraints = constraints;
- this.Index = 0;
- }
-
- public MonoGenericParam (string name, int index, Type[] constraints)
- {
- this.Name = name;
- this.Constraints = constraints;
- this.Index = index + 1;
}
}
}