2005-12-06 Gonzalo Paniagua Javier <gonzalo@ximian.com>
[mono.git] / mcs / bmcs / statement.cs
index 12d0ba15d3d91ea11f31074862c8a4a0d0c0ca34..8dce0ad24f979bcae4d5045790ff2904b14f0580 100644 (file)
@@ -584,7 +584,7 @@ namespace Mono.CSharp {
                                        return false;
 
                                if (Expr.Type != ec.ReturnType) {
-                                       Expr = Convert.ImplicitConversionRequired (
+                                       Expr = Convert.WideningConversionRequired (
                                                ec, Expr, ec.ReturnType, loc);
                                        if (Expr == null)
                                                return false;
@@ -646,6 +646,7 @@ namespace Mono.CSharp {
                                label.AddUsageVector (ec.CurrentBranching.CurrentUsageVector);
 
                        ec.CurrentBranching.CurrentUsageVector.Goto ();
+                       label.AddReference ();
 
                        return true;
                }
@@ -718,8 +719,6 @@ namespace Mono.CSharp {
                {
                        ec.CurrentBranching.Label (vectors);
 
-                       referenced = true;
-
                        return true;
                }
 
@@ -732,6 +731,11 @@ namespace Mono.CSharp {
                        LabelTarget (ec);
                        ec.ig.MarkLabel (label);
                }
+
+               public void AddReference ()
+               {
+                       referenced = true;
+               }
        }
        
 
@@ -3441,7 +3445,7 @@ namespace Mono.CSharp {
                                        //
                                        ArrayPtr array_ptr = new ArrayPtr (e, loc);
                                        
-                                       Expression converted = Convert.ImplicitConversionRequired (
+                                       Expression converted = Convert.WideningConversionRequired (
                                                ec, array_ptr, vi.VariableType, loc);
                                        if (converted == null)
                                                return false;
@@ -3471,7 +3475,7 @@ namespace Mono.CSharp {
                                // For other cases, flag a `this is already fixed expression'
                                //
                                if (e is LocalVariableReference || e is ParameterReference ||
-                                   Convert.ImplicitConversionExists (ec, e, vi.VariableType)){
+                                   Convert.WideningConversionExists (ec, e, vi.VariableType)){
                                    
                                        Report.Error (245, loc, "right hand expression is already fixed, no need to use fixed statement ");
                                        return false;
@@ -3541,7 +3545,7 @@ namespace Mono.CSharp {
                                        ig.Emit (OpCodes.Stloc, pinned_string);
 
                                        Expression sptr = new StringPtr (pinned_string, loc);
-                                       Expression converted = Convert.ImplicitConversionRequired (
+                                       Expression converted = Convert.WideningConversionRequired (
                                                ec, sptr, vi.VariableType, loc);
                                        
                                        if (converted == null)
@@ -3844,7 +3848,7 @@ namespace Mono.CSharp {
                                        continue;
                                }
 
-                               converted_vars [i] = Convert.ImplicitConversionRequired (
+                               converted_vars [i] = Convert.WideningConversionRequired (
                                        ec, var, TypeManager.idisposable_type, loc);
 
                                if (converted_vars [i] == null)
@@ -3876,7 +3880,7 @@ namespace Mono.CSharp {
                bool ResolveExpression (EmitContext ec)
                {
                        if (!TypeManager.ImplementsInterface (expr_type, TypeManager.idisposable_type)){
-                               conv = Convert.ImplicitConversionRequired (
+                               conv = Convert.WideningConversionRequired (
                                        ec, expr, TypeManager.idisposable_type, loc);
 
                                if (conv == null)
@@ -4170,7 +4174,7 @@ namespace Mono.CSharp {
                        // Although it is not as important in this case, as the type
                        // will not likely be object (what the enumerator will return).
                        //
-                       conv = Convert.ExplicitConversion (ec, empty, var_type, loc);
+                       conv = Convert.WideningAndNarrowingConversion (ec, empty, var_type, loc);
                        if (conv == null)
                                ok = false;