The Trunk: Collections-nice.826.mcz

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

The Trunk: Collections-nice.826.mcz

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