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 [EMAIL PROTECTED]

http://bugzilla.ximian.com/show_bug.cgi?id=76550

--- 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 [EMAIL PROTECTED]  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 [EMAIL PROTECTED]  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.
_______________________________________________
mono-bugs maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-bugs

Reply via email to