[Pkg] The Trunk: Collections-nice.826.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Apr 25 12:23:25 UTC 2019


Nicolas Cellier uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-nice.826.mcz

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

Name: Collections-nice.826
Author: nice
Time: 25 April 2019, 2:22:58.283343 pm
UUID: 116c66c9-4c34-5c4f-a9d9-c21d3141c5ea
Ancestors: Collections-fn.825

Fix bugs in LazyCharacterSet
The block instance variable should not refer to itself, or we'll get an infinite recursion when evaluating.
Thus when modifying the collection (#add: #addAll: #remove: #removeAll:), we must use a temporary reference to block

Fix another typo bug in removeAll s/include:/includes:/

Unfortunately, there was a Player>>#include: preventing an easy detection of the bug

Example:

	(CharacterSet separators complement reject: [:e | e isVowel])
		removeAll: ($0 to: $9);
		includes: $3.

=============== Diff against Collections-fn.825 ===============

Item was changed:
  ----- Method: LazyCharacterSet>>add: (in category 'adding') -----
  add: aCharacter
+ 	| oldBlock |
+ 	oldBlock := block.
+ 	block := [:c | c = aCharacter or: [oldBlock value: c]].
- 	self block: [:c | c = aCharacter or: [block value: c]].
  	^aCharacter!

Item was changed:
  ----- Method: LazyCharacterSet>>addAll: (in category 'adding') -----
  addAll: aCollection
+ 	| oldBlock |
+ 	oldBlock := block.
+ 	block := [:c | (aCollection includes: c) or: [oldBlock value: c]].
- 	self block: [:c | (aCollection includes: c) or: [block value: c]].
  	^aCollection!

Item was changed:
  ----- Method: LazyCharacterSet>>remove: (in category 'removing') -----
  remove: aCharacter
+ 	| oldBlock |
+ 	oldBlock := block.
+ 	block := [:c | (c = aCharacter) not and: [oldBlock value: c]].
- 	self block: [:c | (c = aCharacter) not and: [block value: c]].
  	^aCharacter!

Item was changed:
  ----- Method: LazyCharacterSet>>removeAll: (in category 'removing') -----
  removeAll: aCollection
+ 	| oldBlock |
+ 	oldBlock := block.
+ 	block := [:c | (aCollection includes: c) not and: [oldBlock value: c]].
- 	self block: [:c | (aCollection include: c) not and: [block value: c]].
  	^aCollection!



More information about the Packages mailing list