Author: marek
Date: 2008-01-22 08:15:52 -0500 (Tue, 22 Jan 2008)
New Revision: 93520

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: Implemented NewArrayInit 
expression.
        


Modified: trunk/mcs/mcs/ChangeLog
===================================================================
--- trunk/mcs/mcs/ChangeLog     2008-01-22 12:42:03 UTC (rev 93519)
+++ trunk/mcs/mcs/ChangeLog     2008-01-22 13:15:52 UTC (rev 93520)
@@ -1,5 +1,9 @@
 2008-01-22  Marek Safar  <[EMAIL PROTECTED]>
 
+       * ecore.cs, expression.cs, generic.cs: Implemented NewArrayInit 
expression.
+       
+2008-01-22  Marek Safar  <[EMAIL PROTECTED]>
+
        A fix for bug #355161
        * ecore.cs, expression.cs: Wider range of extension method supported
        expressions.

Modified: trunk/mcs/mcs/ecore.cs
===================================================================
--- trunk/mcs/mcs/ecore.cs      2008-01-22 12:42:03 UTC (rev 93519)
+++ trunk/mcs/mcs/ecore.cs      2008-01-22 13:15:52 UTC (rev 93520)
@@ -1325,7 +1325,10 @@
 
                public override Expression CreateExpressionTree (EmitContext ec)
                {
-                       return child.CreateExpressionTree (ec);
+                       ArrayList args = new ArrayList (2);
+                       args.Add (new Argument (child.CreateExpressionTree 
(ec)));
+                       args.Add (new Argument (new TypeOf (new TypeExpression 
(type, loc), loc)));
+                       return CreateExpressionFactoryCall ("Convert", args);
                }
 
                public override Expression DoResolve (EmitContext ec)

Modified: trunk/mcs/mcs/expression.cs
===================================================================
--- trunk/mcs/mcs/expression.cs 2008-01-22 12:42:03 UTC (rev 93519)
+++ trunk/mcs/mcs/expression.cs 2008-01-22 13:15:52 UTC (rev 93520)
@@ -5348,6 +5348,23 @@
                        return true;
                }
                
+               public override Expression CreateExpressionTree (EmitContext ec)
+               {
+                       if (dimensions != 1) {
+                               Report.Error (838, loc, "An expression tree 
cannot contain a multidimensional array initializer");
+                               return null;
+                       }
+
+                       ArrayList args = new ArrayList (array_data == null ? 1 
: array_data.Count + 1);
+                       args.Add (new Argument (new TypeOf (new TypeExpression 
(array_element_type, loc), loc)));
+                       if (array_data != null) {
+                               foreach (Expression e in array_data)
+                                       args.Add (new Argument 
(e.CreateExpressionTree (ec)));
+                       }
+
+                       return CreateExpressionFactoryCall ("NewArrayInit", 
args);
+               }               
+               
                public void UpdateIndices ()
                {
                        int i = 0;

Modified: trunk/mcs/mcs/generic.cs
===================================================================
--- trunk/mcs/mcs/generic.cs    2008-01-22 12:42:03 UTC (rev 93519)
+++ trunk/mcs/mcs/generic.cs    2008-01-22 13:15:52 UTC (rev 93520)
@@ -3264,6 +3264,14 @@
                        {
                                return new Wrap (expr).Resolve (ec) as Wrap;
                        }
+                       
+                       public override Expression CreateExpressionTree 
(EmitContext ec)
+                       {
+                               ArrayList args = new ArrayList (2);
+                               args.Add (new Argument 
(expr.CreateExpressionTree (ec)));
+                               args.Add (new Argument (new TypeOf (new 
TypeExpression (type, loc), loc)));
+                               return CreateExpressionFactoryCall ("Convert", 
args);
+                       }                       
 
                        public override Expression DoResolve (EmitContext ec)
                        {

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

Reply via email to