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
