Insert constructor into AST before initializer is parsed
[mono.git] / mcs / mcs / typemanager.cs
index a897de2689089b9732b55829530cc1eac3e1ae69..51bc5326bca4c7f3d194f6361fb58dd02eaac46c 100644 (file)
@@ -8,7 +8,8 @@
 // Dual licensed under the terms of the MIT X11 or GNU GPL
 //
 // Copyright 2001-2003 Ximian, Inc (http://www.ximian.com)
-// Copyright 2003-2008 Novell, Inc.
+// Copyright 2003-2011 Novell, Inc.
+// Copyright 2011 Xamarin Inc
 //
 
 using System;
@@ -208,6 +209,7 @@ namespace Mono.CSharp
                public readonly PredefinedType MethodBase;
                public readonly PredefinedType MethodInfo;
                public readonly PredefinedType ConstructorInfo;
+               public readonly PredefinedType MemberBinding;
 
                //
                // C# 4.0
@@ -256,6 +258,7 @@ namespace Mono.CSharp
 
                        Expression = new PredefinedType (module, MemberKind.Class, "System.Linq.Expressions", "Expression");
                        ExpressionGeneric = new PredefinedType (module, MemberKind.Class, "System.Linq.Expressions", "Expression", 1);
+                       MemberBinding = new PredefinedType (module, MemberKind.Class, "System.Linq.Expressions", "MemberBinding");
                        ParameterExpression = new PredefinedType (module, MemberKind.Class, "System.Linq.Expressions", "ParameterExpression");
                        FieldInfo = new PredefinedType (module, MemberKind.Class, "System.Reflection", "FieldInfo");
                        MethodBase = new PredefinedType (module, MemberKind.Class, "System.Reflection", "MethodBase");
@@ -791,16 +794,6 @@ namespace Mono.CSharp
                                        return null;
                        }
 
-                       if (filter_builder != null) {
-                               var types = filter_builder ();
-
-                               if (filter.Kind == MemberKind.Field)
-                                       filter = new MemberFilter (filter.Name, filter.Arity, filter.Kind, null, types[0]);
-                               else
-                                       filter = new MemberFilter (filter.Name, filter.Arity, filter.Kind,
-                                               ParametersCompiled.CreateFullyResolved (types), filter.MemberType);
-                       }
-
                        if (filter_builder != null) {
                                filter = new MemberFilter (filter.Name, filter.Arity, filter.Kind,
                                        ParametersCompiled.CreateFullyResolved (filter_builder ()), filter.MemberType);
@@ -851,43 +844,6 @@ namespace Mono.CSharp
        {
                return mb.GetSignatureForError ();
        }
-
-       // Obsolete
-       public static bool IsDelegateType (TypeSpec t)
-       {
-               return t.IsDelegate;
-       }
-       
-       // Obsolete
-       public static bool IsEnumType (TypeSpec t)
-       {
-               return t.IsEnum;
-       }
-
-       //
-       // Whether a type is unmanaged.  This is used by the unsafe code (25.2)
-       //
-       public static bool IsUnmanagedType (TypeSpec t)
-       {
-               var ds = t.MemberDefinition as DeclSpace;
-               if (ds != null)
-                       return ds.IsUnmanagedType ();
-
-               if (t.Kind == MemberKind.Void)
-                       return true;
-
-               // Someone did the work of checking if the ElementType of t is unmanaged.  Let's not repeat it.
-               if (t.IsPointer)
-                       return IsUnmanagedType (GetElementType (t));
-
-               if (!TypeSpec.IsValueType (t))
-                       return false;
-
-               if (t.IsNested && t.DeclaringType.IsGenericOrParentIsGeneric)
-                       return false;
-
-               return true;
-       }       
                
        public static bool IsFamilyAccessible (TypeSpec type, TypeSpec parent)
        {
@@ -953,12 +909,12 @@ namespace Mono.CSharp
        /// </summary>
        public static bool VerifyUnmanaged (ModuleContainer rc, TypeSpec t, Location loc)
        {
-               while (t.IsPointer)
-                       t = GetElementType (t);
-
-               if (IsUnmanagedType (t))
+               if (t.IsUnmanaged)
                        return true;
 
+               while (t.IsPointer)
+                       t = ((ElementTypeSpec) t).Element;
+
                rc.Compiler.Report.SymbolRelatedToPreviousError (t);
                rc.Compiler.Report.Error (208, loc,
                        "Cannot take the address of, get the size of, or declare a pointer to a managed type `{0}'",