[squeak-dev] The Inbox: Collections-ul.564.mcz
Tobias Pape
Das.Linux at gmx.de
Mon Feb 3 14:49:47 UTC 2014
On 03.02.2014, at 15:28, Frank Shearar <frank.shearar at gmail.com> wrote:
> On 3 February 2014 13:48, <commits at source.squeak.org> wrote:
>> A new version of Collections was added to project The Inbox:
>> http://source.squeak.org/inbox/Collections-ul.564.mcz
>>
>> ==================== Summary ====================
>>
>> Name: Collections-ul.564
>> Author: ul
>> Time: 3 February 2014, 2:35:36.802 pm
>> UUID: 4b9a37ef-df86-40a0-a0dd-8e8b2c04d4ed
>> Ancestors: Collections-ul.563
>>
>> Make sure that Array >> #isLiteral won't get into an infinite recursion, even if the receiver has an recursive structure.
>>
>> =============== Diff against Collections-ul.563 ===============
>>
>> Item was changed:
>> ----- Method: Array>>isLiteral (in category 'testing') -----
>> isLiteral
>> +
>> + ^self class == Array and: [
>> + self isLiteralIfContainedBy: IdentitySet new ]!
>> - ^self class == Array and: [self allSatisfy: [:each | each isLiteral]]!
>>
>> Item was added:
>> + ----- Method: Array>>isLiteralIfContainedBy: (in category 'testing') -----
>> + isLiteralIfContainedBy: parents
>> + " Answer whether the receiver has a literal text form recognized by the compiler. Precondition: the receiver is an instance of Array. "
>> +
>> + (parents includes: self) ifTrue: [ ^false ].
>> + parents add: self.
>> + 1 to: self size do: [ :index |
>> + | element |
>> + element := self at: index.
>> + (element class == Array
>> + ifTrue: [ element isLiteralIfContainedBy: parents ]
>> + ifFalse: [ element isLiteral ]) ifFalse: [ ^false ] ].
>> + parents remove: self.
>> + ^true!
>
> So this is a basic depth first traversal with cycle protection, yes?
> (This pattern seems to crop up _a lot_. Maybe it's worth pulling out
> as a separate algorithm?)
Well, there are two such applications:
One with an explicit down-handling of a variable (like this)
and one with an implicit variable (semi-global)
(Dynamic variable, probably, at least thread-local)
I would like to have both.
I propose the (seaside-inspired) #use:during: message for the second.
However I cannot imagine a generic message for the first variant.
Best
-Tobias
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 1665 bytes
Desc: Message signed with OpenPGP using GPGMail
Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20140203/69d93682/signature.pgp
More information about the Squeak-dev
mailing list
|