2008-04-16 Marek Safar <marek.safar@gmail.com>
authorMarek Safar <marek.safar@gmail.com>
Wed, 16 Apr 2008 18:29:16 +0000 (18:29 -0000)
committerMarek Safar <marek.safar@gmail.com>
Wed, 16 Apr 2008 18:29:16 +0000 (18:29 -0000)
* class.cs, cs-parser.jay: Early check for base types expression.

svn path=/trunk/mcs/; revision=100928

mcs/mcs/ChangeLog
mcs/mcs/class.cs
mcs/mcs/cs-parser.jay

index 07501867f90c27cd8922b5ad7275d11b70507b9a..8061ce9f657913c60f6af84468cd5c47e4a14c0f 100644 (file)
@@ -1,3 +1,7 @@
+2008-04-16  Marek Safar  <marek.safar@gmail.com>
+
+       * class.cs, cs-parser.jay: Early check for base types expression.
+
 2008-04-16  Marek Safar  <marek.safar@gmail.com>
 
        * decl.cs (MemberName): Declare PrettyName as obsolete.
index 49c1f26ebfdd2b7b27c9da950588d11853a6d1a5..04a25f90d64b69d458e44ba3f82670f9639f3b45 100644 (file)
@@ -3048,11 +3048,6 @@ namespace Mono.CSharp {
                                        return ifaces;
                                }
 
-                               if (base_class.Type.IsArray || base_class.Type.IsPointer) {
-                                       Report.Error (1521, base_class.Location, "Invalid base type");
-                                       return ifaces;
-                               }
-
                                if (base_class.IsSealed){
                                        Report.SymbolRelatedToPreviousError (base_class.Type);
                                        if (base_class.Type.IsAbstract) {
index c6c05bfa03aceff4ad0e034d2a08db4f0da869bd..3bd028c761587e76a17e980e358509c6b74cd994 100644 (file)
@@ -3068,22 +3068,29 @@ non_expression_type
        ;
 
 type_list
-       : type
+       : base_type_name
          {
-               ArrayList types = new ArrayList (4);
-
+               ArrayList types = new ArrayList (2);
                types.Add ($1);
                $$ = types;
          }
-       | type_list COMMA type
+       | type_list COMMA base_type_name
          {
                ArrayList types = (ArrayList) $1;
-
                types.Add ($3);
                $$ = types;
          }
        ;
 
+base_type_name
+       : type
+         {
+               if ($1 is ComposedCast)
+                       Report.Error (1521, GetLocation ($1), "Invalid base type `{0}'", ((ComposedCast)$1).GetSignatureForError ());
+               $$ = $1;
+         }
+       ;
+       
 /*
  * replaces all the productions for isolating the various
  * simple types, but we need this to reuse it easily in local_variable_type