[squeak-dev] The Trunk: Kernel-eem.1196.mcz

commits at source.squeak.org commits at source.squeak.org
Tue Nov 20 21:39:14 UTC 2018


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]!



More information about the Squeak-dev mailing list