[Mono-bugs] [Bug 76550][Nor] Changed - [PATCH] ParameterReference.Emit does not handle leave_copy

bugzilla-daemon at bugzilla.ximian.com bugzilla-daemon at bugzilla.ximian.com
Fri Nov 11 02:28:31 EST 2005

Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by bmaurer at users.sf.net.


--- shadow/76550	2005-11-11 02:08:00.000000000 -0500
+++ shadow/76550.tmp.4220	2005-11-11 02:28:31.000000000 -0500
@@ -104,6 +104,45 @@
 ------- Additional Comments From miguel at ximian.com  2005-11-11 02:07 -------
 Is there a reason to pass "ref LocalTemporary" around everywhere?
 It seems like it can be completely local to the routine that consumes
 it.  What am I missing
+------- Additional Comments From bmaurer at users.sf.net  2005-11-11 02:28 -------
+Emit and EmitAssign must share a local variable: it is not enough to
+do clever manipulations with the stack using dup to pass the
+information between the two routines.
+In LocalVariableReference (which is very similar to this code), we
+have the LocalTemporary as an instance variable. However, that's not
+an option here, the closest we can get is passing it by ref. The other
+(probably cleaner) way to do it is to refactor this to look more like
+the local code. However, this may require more knowledge of the
+anonymous code than I have.
+One example where you need to use a local temporary in both methods is
+y++ where y is captured. The code path is:
+		this.EmitAssign (ec, source, false, true)
+			<load context>
+			dup
+			Binary.Emit ()
+				this.Emit (ec, true);
+				ldfld y
+				dup
+				stloc temp
+				end this.Emit (ec, true);
+				IntConstant.Emit ()
+				ldc.i4.1
+				end IntConstant.Emit
+				add
+			end Binary.Emit ()
+			stfld
+			ldloc temp
+		end this.EmitAssign (ec, source, false, true)
+Note how both Emit and EmitAssign need to use that temporary variable.

More information about the mono-bugs mailing list