[squeak-dev] The Inbox: Collections-ul.564.mcz

Chris Muller asqueaker at gmail.com
Mon Feb 3 15:57:47 UTC 2014


I guess there's infinite recursion in Array's printing method too...

An Array containing itself?  Obviously that's a rare structure the
system has never dealt with.

Do you think there'll be any other traversing methods that might be affected?

On Mon, Feb 3, 2014 at 7:48 AM,  <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!
>
>


More information about the Squeak-dev mailing list