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

commits at source.squeak.org commits at source.squeak.org
Sun Feb 12 21:31:01 UTC 2023


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

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

Name: Kernel-eem.1498
Author: eem
Time: 12 February 2023, 1:30:55.883243 pm
UUID: e8b69d4d-8a07-4cf8-8ee7-d764b47f1981
Ancestors: Kernel-tpr.1497

In implementing BlockClosure>>hasMethodReturn, don't assume the byutecode set.

Implement Context>>#home so that it will code with clean blocks.

=============== Diff against Kernel-tpr.1497 ===============

Item was changed:
  ----- Method: BlockClosure>>hasMethodReturn (in category 'testing') -----
  hasMethodReturn
  	"Answer whether the receiver has a method-return ('^') in its code."
  	| scanner endpc |
+ 	scanner := InstructionStream new method: self method pc: startpcOrMethod.
- 	scanner := InstructionStream new method: outerContext method pc: startpcOrMethod.
  	endpc := self endPC.
+ 	scanner scanFor:
+ 		[:byte |
+ 		scanner willReturn ifTrue:
+ 			[scanner willBlockReturn ifFalse:
+ 				[^true]].
+ 		scanner pc >= endpc].
+ 	^false!
- 	scanner scanFor: [:byte | (byte between: 120 and: 124) or: [scanner pc > endpc]].
- 	^scanner pc <= endpc!

Item was changed:
  ----- Method: Context>>home (in category 'accessing') -----
  home 
+ 	"Answer the outermost context (along the static chain) for the receiver.
+ 	 This is the outermost lexical scope in which the receiver's method is defined."
- 	"Answer the context in which the receiver was defined."
  
+ 	^closureOrNil
+ 		ifNil: [self] "normal method activation"
+ 		ifNotNil:	"block activation"
+ 			[:closure|
+ 			 closure outerContext
+ 				ifNil: [self] "clean block"
+ 				ifNotNil: [:outerContext| outerContext home]] "normal block"!
- 	closureOrNil == nil ifTrue:
- 		[^self].
- 	^closureOrNil outerContext home!



More information about the Squeak-dev mailing list