The Trunk: Kernel-eem.713.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Kernel-eem.713.mcz

commits-2
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!