Eliot Miranda uploaded a new version of Compiler to project The Trunk: http://source.squeak.org/trunk/Compiler-eem.259.mcz
==================== Summary ====================
Name: Compiler-eem.259 Author: eem Time: 3 April 2013, 1:53:21.499 pm UUID: 5bca5ca6-0cbc-4c06-959f-219d601b27c0 Ancestors: Compiler-eem.258
Fix literal duplication with special bindings for classes. LiteralNode>>reserve: needs to use sharableLitIndex: if it is a special binding. The decompiler is still broken by Compiler-eem.258 for v := SpecialBinding := expr. But at least methods containing globals are debuggable again.
=============== Diff against Compiler-eem.258 ===============
Item was changed: ----- Method: Encoder>>litIndex: (in category 'encoding') ----- litIndex: literal | p | + (literal isVariableBinding and: [literalStream originalContents identityIncludes: literal]) ifTrue: + [self halt]. p := literalStream position. p = 256 ifTrue: [self notify: 'More than 256 literals referenced. You must split or otherwise simplify this method. The 257th literal is: ', literal printString. ^nil]. "Would like to show where it is in the source code, but that info is hard to get." literalStream nextPut: literal. ^ p!
Item was added: + ----- Method: LiteralNode>>reserve: (in category 'code generation') ----- + reserve: encoder + "If this is a yet unused literal of type -code, reserve it." + + code < 0 ifTrue: + [index := key isVariableBinding "true if sending value[:] to a special binding" + ifTrue: [encoder sharableLitIndex: key] + ifFalse: [encoder litIndex: key]. + code := self code: index type: 0 - code]!
Item was changed: ----- Method: LiteralVariableNode>>sizeCodeForStore: (in category 'code generation') ----- sizeCodeForStore: encoder self reserve: encoder. (key isVariableBinding and: [key isSpecialWriteBinding]) ifFalse: [^encoder sizeStoreLiteralVar: index]. - code < 0 ifTrue: - [self flag: #dubious. - self code: (self code: self index type: LdLitType)]. writeNode := encoder encodeSelector: #value:. "On entry the stack has only the expression. Push the binding, duplicate the expression, send #value: and pop." ^(encoder sizePushLiteral: index) + (encoder sizePushTempLong: 0) "we don't know yet, hence long, sigh..." + (writeNode sizeCode: encoder args: 1 super: false) + encoder sizePop!
squeak-dev@lists.squeakfoundation.org