[Test] Cleaned up how a bunch of tests were ignored
[mono.git] / mcs / class / corlib / System.Reflection.Emit / ConstructorOnTypeBuilderInst.cs
index 760c30de73c5821b1578fe458d2a9398100135b3..161e45ce767dc61cbb4c36ea2991e33815dbcaa4 100644 (file)
 // 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;
@@ -99,20 +100,43 @@ namespace System.Reflection.Emit
 
                public override ParameterInfo[] GetParameters ()
                {
-                       return cb.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 {
-                               if (!((ModuleBuilder)cb.Module).assemblyb.IsCompilerContext)
-                                       return base.MetadataToken;
-                               return cb.MetadataToken;
+                               return base.MetadataToken;
                        }
                }
 
-               internal override int GetParameterCount ()
+               internal override int GetParametersCount ()
                {
-                       return cb.GetParameterCount ();
+                       return cb.GetParametersCount ();
                }
 
                public override Object Invoke (Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)