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