Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.713.mcz ==================== Summary ==================== Name: Kernel-eem.713 Author: eem Time: 24 October 2012, 4:04:09.929 pm UUID: e8650d8a-3b37-4fb3-9e2f-8bc074c2d3d6 Ancestors: Kernel-eem.712 Make ClosureExtractor produce properly nested closures. If the closures ever get passed on to DebuggerMethodMap instances they can confuse the debugger if not properly nested. =============== Diff against Kernel-eem.712 =============== Item was changed: InstructionClient subclass: #ClosureExtractor + instanceVariableNames: 'action scanner currentContext' - instanceVariableNames: 'action scanner' classVariableNames: '' poolDictionaries: '' category: 'Kernel-Methods'! !ClosureExtractor commentStamp: 'mha 9/21/2010 11:16' prior: 0! A ClosureExtractor is a utility class that is used to extract all BlockClosures from a CompiledMethod. It inherits from InstructionClient and understands only one single message, namely that corresponding to the push closure bytecode instruction. Being sent this message, a ClosureExtractor will create a BlockClosure instance and evaluate the block it holds as an instance variable with that closure as parameter.! Item was added: + ----- Method: ClosureExtractor>>blockReturnTop (in category 'instruction decoding') ----- + blockReturnTop + currentContext := currentContext sender! Item was changed: ----- Method: ClosureExtractor>>pushClosureCopyNumCopiedValues:numArgs:blockSize: (in category 'instruction decoding') ----- pushClosureCopyNumCopiedValues: numCopied numArgs: numArgs blockSize: blockSize - "Create a BlockClosure corresponding to the closure bytecode + and execute the action block with it. The created BlockClosure is only a pseudo value, + it is not populated with meaningful context and argument information." + | block | + block := BlockClosure + outerContext: currentContext + startpc: scanner pc + numArgs: numArgs + copiedValues: (Array new: numCopied).. + currentContext := block asContextWithSender: currentContext. + action value: block! - and execute the action block with it. The created BlockClosure is only a pseudo value, - it is not populated with meaningful context and argument information." - - action value: - (BlockClosure - outerContext: (MethodContext - sender: thisContext - receiver: self - method: scanner method - arguments: (Array new: scanner method numArgs)) - startpc: scanner pc - numArgs: numArgs - copiedValues: (Array new: numCopied))! Item was changed: ----- Method: ClosureExtractor>>scanner: (in category 'accessing') ----- scanner: anInstructionStream + scanner := anInstructionStream. + currentContext := MethodContext + sender: nil + receiver: self + method: scanner method + arguments: (Array new: scanner method numArgs)! - scanner := anInstructionStream! |
Free forum by Nabble | Edit this page |