The Trunk: Kernel-eem.1196.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.1196.mcz

commits-2
Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.1196.mcz

==================== Summary ====================

Name: Kernel-eem.1196
Author: eem
Time: 20 November 2018, 1:39:00.487858 pm
UUID: d725b2e7-fe69-472d-8775-25948cabcc8c
Ancestors: Kernel-eem.1195

Fix ClosureExtractor (embeddedBlockClosures) for exotic Sista blocks.

=============== Diff against Kernel-eem.1195 ===============

Item was changed:
  ----- Method: ClosureExtractor>>pushFullClosure:numCopied: (in category 'instruction decoding') -----
  pushFullClosure: aCompiledBlock numCopied: numCopied
  "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."
+ self pushFullClosure: aCompiledBlock numCopied: numCopied receiverOnStack: false ignoreOuterContext: false!
- | block |
- block := FullBlockClosure
- receiver: nil
- outerContext: currentContext
- method: aCompiledBlock
- copiedValues: (Array new: numCopied).
- currentContext := block asContextWithSender: currentContext.
- action value: block!

Item was added:
+ ----- Method: ClosureExtractor>>pushFullClosure:numCopied:receiverOnStack:ignoreOuterContext: (in category 'instruction decoding') -----
+ pushFullClosure: aCompiledBlock numCopied: numCopied receiverOnStack: rcvrOnStack ignoreOuterContext: ignoreOuterContext
+ "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 encoderClass endPC extractor subScanner |
+ block := FullBlockClosure
+ receiver: (rcvrOnStack ifTrue: [#onStackReceiver])
+ outerContext: (ignoreOuterContext ifFalse: [currentContext])
+ method: aCompiledBlock
+ copiedValues: (Array new: numCopied).
+ currentContext := block asContextWithSender: currentContext.
+ action value: block.
+ subScanner := aCompiledBlock scanner.
+ extractor := self class withAction: action andScanner: subScanner.
+ endPC := aCompiledBlock endPC.
+ encoderClass := aCompiledBlock encoderClass.
+ [subScanner pc <= endPC] whileTrue:
+ [encoderClass interpretNextInstructionFor: extractor in: subScanner]!