Eliot Miranda uploaded a new version of Compiler to project The Trunk: http://source.squeak.org/trunk/Compiler-eem.289.mcz
==================== Summary ====================
Name: Compiler-eem.289 Author: eem Time: 6 October 2014, 11:58:50.62 am UUID: 7d67c48c-4a2f-4445-83e8-1f8f931801e3 Ancestors: Compiler-eem.288
Fix doits in the codePane of a debugger opened from another debugger. e.g. before this fix
1. debug 3+4. 2. in code pane of debugger #1 debug 4+5 3. in code pane of debugger #2 debug 5+6, boom.
The bug was that when the encoder creates temp names for temp vars in the debugged context, which it does by creating messages to DoItIn:'s argument 'ThisContext', if this is a level 3 debug, then the original expression would have a temp var called 'ThisContext' already and that would overwrite the 'ThisContext' argument for this level with a message send, and boom.
The fix is merely to filter-out these temps and hence never overwrite DoItIn:'s 'ThisContext' argument in the scope table.
=============== Diff against Compiler-eem.288 ===============
Item was changed: ----- Method: Encoder>>init:notifying: (in category 'initialize-release') ----- init: aCue notifying: anObject "The use of the variable requestor is a bit confusing here. This is *not* the original requestor, which is available through the cue. It's the Parser instance that is using the encoder."
self setCue: aCue. requestor := anObject. nTemps := 0. supered := false. self initScopeAndLiteralTables. cue getClass variablesAndOffsetsDo: [:variable "<String|CFieldDefinition>" :offset "<Integer|nil>" | offset isNil ifTrue: [scopeTable at: variable name put: (FieldNode new fieldDefinition: variable)] ifFalse: [scopeTable at: variable put: (offset >= 0 ifTrue: [InstanceVariableNode new name: variable index: offset] ifFalse: [MaybeContextInstanceVariableNode new name: variable index: offset negated])]]. cue context ~~ nil ifTrue: [| homeNode | homeNode := self bindTemp: self doItInContextName. "0th temp = aContext passed as arg" cue context tempNames withIndexDo: [:variable :index| + variable ~= self doItInContextName ifTrue: + [scopeTable + at: variable + put: (MessageAsTempNode new + receiver: homeNode + selector: #namedTempAt: + arguments: (Array with: (self encodeLiteral: index)) + precedence: 3 + from: self)]]]. - scopeTable - at: variable - put: (MessageAsTempNode new - receiver: homeNode - selector: #namedTempAt: - arguments: (Array with: (self encodeLiteral: index)) - precedence: 3 - from: self)]]. sourceRanges := Dictionary new: 32. globalSourceRanges := OrderedCollection new: 32 !
packages@lists.squeakfoundation.org