In fact I did it because this is irregular in the sense that binary selector should not printed with # while the keywords based symbol should. (RBScanner on: '(RBScanner on: 'Object < #MyObject classVariables: { #A. #B }; package: #MyPackage' readStream) contents collect: #value readStream) contents collect: #value
#('Object' #< #MyObject 'classVariables:' ${ #A $. #B $} $; 'package:' #MyPackage)
and back should be 'Object < #MyObject classVariables: { #A. #B }; package: #MyPackage'
On 20 Jan 2020, at 16:22, ducasse <stepharo@netcourrier.com> wrote:
Hi sven
I think that I will have to hack my own, I was just surprised that we do not have a nice way back from tokens back to code. (not talking about quote inside strings).
String streamContents: [ :s | #('self' 'classVariables:' ${ #A $. #B $}) do: [ :each | s print: each ] separatedBy: [ s space ]].
'''self'' ''classVariables:'' ${ #A $. #B $}â
S.
On 20 Jan 2020, at 10:45, Sven Van Caekenberghe <sven@stfx.eu <mailto:sven@stfx.eu>> wrote:
#foo printString. '#foo'
String streamContents: [ :out | out print: #foo ]. '#foo'
String streamContents: [ :out | out << #foo ]. 'foo'
I would not use #storeOn: directly, I would consider the fact that String>>#printOn: uses it an implementation detail, and a confusing one at that.
On 20 Jan 2020, at 03:54, Eliot Miranda <eliot.miranda@gmail.com <mailto:eliot.miranda@gmail.com>> wrote:
On Jan 19, 2020, at 1:50 PM, Stéphane Ducasse <stephane.ducasse@inria.fr <mailto:stephane.ducasse@inria.fr>> wrote:
 The idea that is that I would like to be able to
text -> tokens -> text
For text -> tokens
(RBScanner on: 'self classVariables: { #A . #B }' readStream) contents collect: #value
I wrote a little method that takes the result of the RBScanner and recreate the text But I cannot get this method to work. Iâm puzzled because the symbols are eaten.
expressionStringFrom: aLine
"self new expressionStringFrom: #('self' 'classVariables:' ${ #A $. #B $})
'self classVariables: { A . B }' " ^ String streamContents: [ :s | aLine do: [ :each | s << each ] separatedBy: [ s space ]]
I tried with print:, printOn:, but I failed.
Any idea?
With Symbols one needs to use storeOn:
S.
-------------------------------------------- Stéphane Ducasse http://stephane.ducasse.free.fr <http://stephane.ducasse.free.fr/> / http://www.pharo.org <http://www.pharo.org/> 03 59 35 87 52 Assistant: Julie Jonas FAX 03 59 57 78 50 TEL 03 59 35 86 16 S. Ducasse - Inria 40, avenue Halley, Parc Scientifique de la Haute Borne, Bât.A, Park Plaza Villeneuve d'Ascq 59650 France