2009-07-22 Marek Safar <marek.safar@gmail.com>
authorMarek Safar <marek.safar@gmail.com>
Wed, 22 Jul 2009 10:45:12 +0000 (10:45 -0000)
committerMarek Safar <marek.safar@gmail.com>
Wed, 22 Jul 2009 10:45:12 +0000 (10:45 -0000)
* expression.cs: More verifier instrumentation.

* statement.cs: Do proper throw expression conversion.

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

mcs/mcs/ChangeLog
mcs/mcs/expression.cs
mcs/mcs/statement.cs

index bf73a1664217849457d2d1a78383252ffb0c8c5a..30d7af9149b1d340d2c177a015894718ec2c1e90 100644 (file)
@@ -1,3 +1,9 @@
+2009-07-22  Marek Safar  <marek.safar@gmail.com>
+
+       * expression.cs: More verifier instrumentation.
+       
+       * statement.cs: Do proper throw expression conversion.
+
 2009-07-22  Marek Safar  <marek.safar@gmail.com>
 
        A fix for bug #522789
index 7a38a7834834b2ee9e2d658e578e2752ad620322..c9a7ab18eb6db7423553acbd0d87adef93c3291c 100644 (file)
@@ -1344,7 +1344,7 @@ namespace Mono.CSharp {
                                        return CreateConstantResult (TypeManager.IsEqual (d, t));
                        }
 
-                       if (!TypeManager.IsReferenceType (expr.Type))
+                       if (TypeManager.IsGenericParameter (expr.Type))
                                expr = new BoxedCast (expr, d);
 
                        return this;
@@ -5429,9 +5429,6 @@ namespace Mono.CSharp {
                                vr.EmitLoad (ec);
                        }
                        
-                       if (is_type_parameter)
-                               return DoEmitTypeParameter (ec);
-
                        if (Arguments != null)
                                Arguments.Emit (ec);
 
@@ -5446,6 +5443,9 @@ namespace Mono.CSharp {
                                        return false;
                                }
                        }
+                       
+                       if (is_type_parameter)
+                               return DoEmitTypeParameter (ec);                        
 
                        ConstructorInfo ci = (ConstructorInfo) method;
 #if MS_COMPATIBLE
index 66e58d3a364c837545a0ff05dda33900f15c30a3..880ec5670e0e9ce4d00a44c74f3bf91924097170 100644 (file)
@@ -1150,14 +1150,11 @@ namespace Mono.CSharp {
                        if (expr == null)
                                return false;
 
-                       Type t = expr.Type;
+                       if (Convert.ImplicitConversionExists (ec, expr, TypeManager.exception_type))
+                               expr = Convert.ImplicitConversion (ec, expr, TypeManager.exception_type, loc);
+                       else
+                               Report.Error (155, expr.Location, "The type caught or thrown must be derived from System.Exception");
 
-                       if ((t != TypeManager.exception_type) &&
-                           !TypeManager.IsSubclassOf (t, TypeManager.exception_type) &&
-                           t != TypeManager.null_type) {
-                               Error (155, "The type caught or thrown must be derived from System.Exception");
-                               return false;
-                       }
                        return true;
                }