Author: marek
Date: 2008-01-22 16:47:06 -0500 (Tue, 22 Jan 2008)
New Revision: 93582

Modified:
   trunk/mcs/mcs/ChangeLog
   trunk/mcs/mcs/ecore.cs
   trunk/mcs/mcs/expression.cs
   trunk/mcs/mcs/generic.cs
Log:
2008-01-22  Marek Safar  <[EMAIL PROTECTED]>

        * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool 
conversion is
        not allowed.
        
        * generic.cs: Implemented coalesce expression.
        


Modified: trunk/mcs/mcs/ChangeLog
===================================================================
--- trunk/mcs/mcs/ChangeLog     2008-01-22 21:43:40 UTC (rev 93581)
+++ trunk/mcs/mcs/ChangeLog     2008-01-22 21:47:06 UTC (rev 93582)
@@ -1,5 +1,12 @@
 2008-01-22  Marek Safar  <[EMAIL PROTECTED]>
 
+       * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool 
conversion is
+       not allowed.
+       
+       * generic.cs: Implemented coalesce expression.
+
+2008-01-22  Marek Safar  <[EMAIL PROTECTED]>
+
        A fix for bug #355145
        * anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
        expression tree type inference.

Modified: trunk/mcs/mcs/ecore.cs
===================================================================
--- trunk/mcs/mcs/ecore.cs      2008-01-22 21:43:40 UTC (rev 93581)
+++ trunk/mcs/mcs/ecore.cs      2008-01-22 21:47:06 UTC (rev 93582)
@@ -914,12 +914,6 @@
                static Expression GetOperatorTrueOrFalse (EmitContext ec, 
Expression e, bool is_true, Location loc)
                {
                        MethodGroupExpr operator_group;
-
-#if GMCS_SOURCE
-                       if (TypeManager.IsNullableType (e.Type))
-                               return new Nullable.OperatorTrueOrFalse (e, 
is_true, loc).Resolve (ec);
-#endif
-
                        operator_group = MethodLookup (ec.ContainerType, 
e.Type, is_true ? "op_True" : "op_False", loc) as MethodGroupExpr;
                        if (operator_group == null)
                                return null;

Modified: trunk/mcs/mcs/expression.cs
===================================================================
--- trunk/mcs/mcs/expression.cs 2008-01-22 21:43:40 UTC (rev 93581)
+++ trunk/mcs/mcs/expression.cs 2008-01-22 21:47:06 UTC (rev 93582)
@@ -3451,11 +3451,6 @@
                        if (expr == null)
                                return null;
 
-#if GMCS_SOURCE
-                       if (TypeManager.IsNullableValueType (expr.Type))
-                               return new Nullable.LiftedConditional (expr, 
true_expr, false_expr, loc).Resolve (ec);
-#endif
-                       
                        if (expr.Type != TypeManager.bool_type){
                                expr = Expression.ResolveBoolean (
                                        ec, expr, loc);

Modified: trunk/mcs/mcs/generic.cs
===================================================================
--- trunk/mcs/mcs/generic.cs    2008-01-22 21:43:40 UTC (rev 93581)
+++ trunk/mcs/mcs/generic.cs    2008-01-22 21:47:06 UTC (rev 93582)
@@ -3449,24 +3449,6 @@
                        }
                }
 
-               public class LiftedConditional : Lifted
-               {
-                       Expression true_expr, false_expr;
-
-                       public LiftedConditional (Expression expr, Expression 
true_expr, Expression false_expr,
-                                                 Location loc)
-                               : base (expr, loc)
-                       {
-                               this.true_expr = true_expr;
-                               this.false_expr = false_expr;
-                       }
-
-                       protected override Expression ResolveUnderlying 
(Expression unwrap, EmitContext ec)
-                       {
-                               return new Conditional (unwrap, true_expr, 
false_expr);
-                       }
-               }
-
                public class LiftedBinaryOperator : Binary
                {
                        Expression underlying, null_value, bool_wrap;
@@ -3755,58 +3737,6 @@
                        }
                }
 
-               public class OperatorTrueOrFalse : Expression
-               {
-                       public readonly bool IsTrue;
-
-                       Expression expr;
-                       Unwrap unwrap;
-
-                       public OperatorTrueOrFalse (Expression expr, bool 
is_true, Location loc)
-                       {
-                               this.IsTrue = is_true;
-                               this.expr = expr;
-                               this.loc = loc;
-                       }
-
-                       public override Expression DoResolve (EmitContext ec)
-                       {
-                               unwrap = Unwrap.Create (expr, ec);
-                               if (unwrap == null)
-                                       return null;
-
-                               if (unwrap.Type != TypeManager.bool_type)
-                                       return null;
-
-                               type = TypeManager.bool_type;
-                               eclass = ExprClass.Value;
-                               return this;
-                       }
-
-                       public override void Emit (EmitContext ec)
-                       {
-                               ILGenerator ig = ec.ig;
-
-                               Label is_null_label = ig.DefineLabel ();
-                               Label end_label = ig.DefineLabel ();
-
-                               unwrap.EmitCheck (ec);
-                               ig.Emit (OpCodes.Brfalse, is_null_label);
-
-                               unwrap.Emit (ec);
-                               if (!IsTrue) {
-                                       ig.Emit (OpCodes.Ldc_I4_0);
-                                       ig.Emit (OpCodes.Ceq);
-                               }
-                               ig.Emit (OpCodes.Br, end_label);
-
-                               ig.MarkLabel (is_null_label);
-                               ig.Emit (OpCodes.Ldc_I4_0);
-
-                               ig.MarkLabel (end_label);
-                       }
-               }
-
                public class NullCoalescingOperator : Expression
                {
                        Expression left, right;
@@ -3821,6 +3751,14 @@
 
                                eclass = ExprClass.Value;
                        }
+                       
+                       public override Expression CreateExpressionTree 
(EmitContext ec)
+                       {
+                               ArrayList args = new ArrayList (2);
+                               args.Add (new Argument 
(left.CreateExpressionTree (ec)));
+                               args.Add (new Argument 
(right.CreateExpressionTree (ec)));
+                               return CreateExpressionFactoryCall ("Coalesce", 
args);
+                       }                       
 
                        public override Expression DoResolve (EmitContext ec)
                        {

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to