Show better message when assigning to the type
authorMarek Safar <marek.safar@gmail.com>
Wed, 25 Aug 2010 11:36:59 +0000 (12:36 +0100)
committerMarek Safar <marek.safar@gmail.com>
Wed, 25 Aug 2010 11:36:59 +0000 (12:36 +0100)
mcs/errors/cs0119-10.cs [new file with mode: 0644]
mcs/errors/cs0119-9.cs [new file with mode: 0644]
mcs/errors/gcs0119-2.cs [new file with mode: 0644]
mcs/errors/gcs0131.cs [deleted file]
mcs/mcs/ecore.cs
mcs/mcs/expression.cs

diff --git a/mcs/errors/cs0119-10.cs b/mcs/errors/cs0119-10.cs
new file mode 100644 (file)
index 0000000..5a14ccf
--- /dev/null
@@ -0,0 +1,14 @@
+// CS0119: Expression denotes a `type', where a `variable' or `value' was expected
+// Line: 12
+
+class A
+{
+}
+
+class B
+{
+       public B ()
+       {
+               A = 2;
+       }
+}
diff --git a/mcs/errors/cs0119-9.cs b/mcs/errors/cs0119-9.cs
new file mode 100644 (file)
index 0000000..cf302c2
--- /dev/null
@@ -0,0 +1,17 @@
+// CS0119: Expression denotes a `type', where a `variable' or `value' was expected
+// Line: 15
+
+class A
+{
+       public class D
+       {
+       }
+}
+
+class B
+{
+       public B ()
+       {
+               A.D = 2;
+       }
+}
diff --git a/mcs/errors/gcs0119-2.cs b/mcs/errors/gcs0119-2.cs
new file mode 100644 (file)
index 0000000..5d67a55
--- /dev/null
@@ -0,0 +1,14 @@
+// CS0119: Expression denotes a `type', where a `variable' or `value' was expected
+// Line: 12
+public class Foo<T>
+{
+}
+class X
+{
+       static void Main ()
+       {
+               Foo<X> = new Foo<X> ();
+       }
+}
diff --git a/mcs/errors/gcs0131.cs b/mcs/errors/gcs0131.cs
deleted file mode 100644 (file)
index 80a8915..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-// CS0131: The left-hand side of an assignment must be a variable, a property or an indexer
-// Line: 13
-using System;
-public class Foo<T>
-{
-}
-class X
-{
-       static void Main ()
-       {
-               Foo<X> = new Foo<X> ();
-       }
-}
index 8f85a7e04c0ca5eff74ed85ced0b506965616463..cba25441b735c7c73fb09ca408eaf78fbb7f83ac 100644 (file)
@@ -2365,7 +2365,7 @@ namespace Mono.CSharp {
                                errorMode = true;
                        }
                }
-
+               
                Expression SimpleNameResolve (ResolveContext ec, Expression right_side, bool intermediate)
                {
                        Expression e = LookupNameExpression (ec, right_side == null, false);
@@ -2373,10 +2373,16 @@ namespace Mono.CSharp {
                        if (e == null)
                                return null;
 
-                       if (right_side != null)
+                       if (right_side != null) {
+                               if (e is TypeExpr) {
+                                   e.Error_UnexpectedKind (ec, ResolveFlags.VariableOrValue, loc);
+                                   return null;
+                               }
+
                                e = e.ResolveLValue (ec, right_side);
-                       else
+                       } else {
                                e = e.Resolve (ec);
+                       }
 
                        //if (ec.CurrentBlock == null || ec.CurrentBlock.CheckInvariantMeaningInBlock (Name, e, Location))
                        return e;
index ada2a1a6aa86714df85898d5d4279caead24f638..d7a29a66479d9eb5b5ed712f6323faa012830451 100644 (file)
@@ -7294,10 +7294,16 @@ namespace Mono.CSharp {
                        if (e == null)
                                return null;
 
-                       if (right_side != null)
+                       if (right_side != null) {
+                               if (e is TypeExpr) {
+                                       e.Error_UnexpectedKind (rc, ResolveFlags.VariableOrValue, loc);
+                                       return null;
+                               }
+
                                e = e.ResolveLValue (rc, right_side);
-                       else
+                       } else {
                                e = e.Resolve (rc, ResolveFlags.VariableOrValue | ResolveFlags.Type);
+                       }
 
                        return e;
                }