[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