// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
+#if !FULL_AOT_RUNTIME
using System;
using System.Globalization;
using System.Reflection;
-
-#if NET_2_0
+using System.Runtime.InteropServices;
namespace System.Reflection.Emit
{
/*
* This class represents a ctor of an instantiation of a generic type builder.
*/
+ [StructLayout (LayoutKind.Sequential)]
internal class ConstructorOnTypeBuilderInst : ConstructorInfo
{
#region Keep in sync with object-internals.h
MonoGenericClass instantiation;
- ConstructorBuilder cb;
+ ConstructorInfo cb;
#endregion
- public ConstructorOnTypeBuilderInst (MonoGenericClass instantiation, ConstructorBuilder cb) {
+ public ConstructorOnTypeBuilderInst (MonoGenericClass instantiation, ConstructorInfo cb)
+ {
this.instantiation = instantiation;
this.cb = cb;
}
}
}
- public override bool IsDefined (Type attributeType, bool inherit) {
- throw new NotSupportedException ();
+ public override Module Module {
+ get {
+ return cb.Module;
+ }
+ }
+
+ public override bool IsDefined (Type attributeType, bool inherit)
+ {
+ return cb.IsDefined (attributeType, inherit);
}
- public override object [] GetCustomAttributes (bool inherit) {
- throw new NotSupportedException ();
+ public override object [] GetCustomAttributes (bool inherit)
+ {
+ return cb.GetCustomAttributes (inherit);
}
- public override object [] GetCustomAttributes (Type attributeType, bool inherit) {
- throw new NotSupportedException ();
+ public override object [] GetCustomAttributes (Type attributeType, bool inherit)
+ {
+ return cb.GetCustomAttributes (attributeType, inherit);
}
//
// MethodBase members
//
- public override MethodImplAttributes GetMethodImplementationFlags() {
+ public override MethodImplAttributes GetMethodImplementationFlags ()
+ {
return cb.GetMethodImplementationFlags ();
}
- public override ParameterInfo[] GetParameters() {
- throw new NotImplementedException ();
+ public override ParameterInfo[] GetParameters ()
+ {
+ /*FIXME, maybe the right thing to do when the type is creates is to retrieve from the inflated type*/
+ if (!instantiation.IsCreated)
+ throw new NotSupportedException ();
+
+ return GetParametersInternal ();
+ }
+
+ internal override ParameterInfo[] GetParametersInternal ()
+ {
+ ParameterInfo [] res;
+ if (cb is ConstructorBuilder) {
+ ConstructorBuilder cbuilder = (ConstructorBuilder)cb;
+ res = new ParameterInfo [cbuilder.parameters.Length];
+ for (int i = 0; i < cbuilder.parameters.Length; i++) {
+ Type type = instantiation.InflateType (cbuilder.parameters [i]);
+ res [i] = ParameterInfo.New (cbuilder.pinfo == null ? null : cbuilder.pinfo [i], type, this, i + 1);
+ }
+ } else {
+ ParameterInfo[] parms = cb.GetParameters ();
+ res = new ParameterInfo [parms.Length];
+ for (int i = 0; i < parms.Length; i++) {
+ Type type = instantiation.InflateType (parms [i].ParameterType);
+ res [i] = ParameterInfo.New (parms [i], type, this, i + 1);
+ }
+ }
+ return res;
+ }
+
+ public override int MetadataToken {
+ get {
+ return base.MetadataToken;
+ }
}
- internal override int GetParameterCount () {
- return cb.GetParameterCount ();
+ internal override int GetParametersCount ()
+ {
+ return cb.GetParametersCount ();
}
- public override Object Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) {
- throw new NotImplementedException ();
+ public override Object Invoke (Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
+ {
+ return cb.Invoke (obj, invokeAttr, binder, parameters,
+ culture);
}
public override RuntimeMethodHandle MethodHandle {
get {
- throw new NotImplementedException ();
+ return cb.MethodHandle;
}
}
}
}
- public override Type [] GetGenericArguments () {
- throw new NotImplementedException ();
+ public override Type [] GetGenericArguments ()
+ {
+ return cb.GetGenericArguments ();
}
public override bool ContainsGenericParameters {
get {
- // FIXME:
- throw new NotImplementedException ();
+ return false;
}
}
public override bool IsGenericMethod {
get {
- return true;
+ return false;
}
}
//
public override object Invoke (BindingFlags invokeAttr, Binder binder, object[] parameters,
- CultureInfo culture) {
- throw new NotImplementedException ();
+ CultureInfo culture)
+ {
+ throw new InvalidOperationException ();
}
}
}