Yes. I just got back to looking at it and noticed the culprit was printString.�� Now ��#printString --> #printStringLimitedTo: --> #streamContents:limitedTo: ��which uses LimitedWriteStream that should protect against such recursion.
However ��Array>>printOn: ��is...
self shouldBePrintedAsLiteral ifTrue: [self printAsLiteralFormOn: aStream. ^ self].
self isSelfEvaluating ifTrue: [self printAsSelfEvaluatingFormOn: aStream. ^ self].
super printOn: aStream
where ��#shouldBePrintedAsLiteral ��and ��#isSelfEvaluating recursively call themselves - bypassing the protection of LimitedWriteStream. ��
As an aside, �� Array>>shouldBePrintedAsLiteral ��seems identical to ��Array>>isLiteral ��-- so is it redundant and the former be deprecated?
Now I don't quite follow the semantics of #isLiteral and #isSelfEvaluating for Arrays.
a := #( 1 2 { 3 . 4 } 5).
a isLiteral. "true"
a isSelfEvaluating. "true"
b := { 1 . 2 . #( 3 4 ) . 5 }.
b isLiteral. "true"
b isSelfEvaluating. "true"
So can someone provide an example for an Array where ��#isLiteral ��or ��#isSelfEvaluating �� are false ?�� Otherwise it seems it will always take the first condition of Array>>printOn: .
cheers -ben