Przeglądaj źródła

don't forget to load the result of the new expression

svn path=/trunk/mcs/; revision=97710
Jb Evain 18 lat temu
rodzic
commit
838d96dfd2

+ 2 - 1
mcs/class/System.Core/System.Linq.Expressions/ElementInit.cs

@@ -29,6 +29,7 @@
 using System;
 using System.Collections.ObjectModel;
 using System.Reflection;
+using System.Reflection.Emit;
 
 namespace System.Linq.Expressions {
 
@@ -56,7 +57,7 @@ namespace System.Linq.Expressions {
 			return ExpressionPrinter.ToString (this);
 		}
 
-		internal void Emit (EmitContext ec)
+		internal void Emit (EmitContext ec, LocalBuilder local)
 		{
 			throw new NotImplementedException ();
 		}

+ 5 - 0
mcs/class/System.Core/System.Linq.Expressions/Expression.cs

@@ -1912,6 +1912,11 @@ namespace System.Linq.Expressions {
 				expression.Emit (ec);
 		}
 
+		internal static void EmitLoad (EmitContext ec, LocalBuilder local)
+		{
+			ec.ig.Emit (OpCodes.Ldloc, local);
+		}
+
 		internal static void EmitCall (EmitContext ec, Expression expression, IEnumerable<Expression> arguments, MethodInfo method)
 		{
 			if (expression != null)

+ 6 - 2
mcs/class/System.Core/System.Linq.Expressions/ListInitExpression.cs

@@ -55,8 +55,12 @@ namespace System.Linq.Expressions {
 
 		internal override void Emit (EmitContext ec)
 		{
-			throw new NotImplementedException ();
-		}
+			var local = EmitStored (ec, new_expression);
+
+			foreach (var initializer in initializers)
+				initializer.Emit (ec, local);
 
+			EmitLoad (ec, local);
+		}
 	}
 }

+ 2 - 0
mcs/class/System.Core/System.Linq.Expressions/MemberInitExpression.cs

@@ -58,6 +58,8 @@ namespace System.Linq.Expressions {
 
 			foreach (var binding in bindings)
 				binding.Emit (ec, local);
+
+			EmitLoad (ec, local);
 		}
 	}
 }