[squeak-dev] Re: Q: FileStream class>>#writeSourceCodeFrom:*
and *TextConverter
Klaus D. Witzel
klaus.witzel at cobss.com
Fri Jul 25 18:03:12 UTC 2008
On Wed, 23 Jul 2008 18:42:15 +0200, Klaus D. Witzel wrote:
> On Wed, 23 Jul 2008 17:46:58 +0200, Yoshiki Ohshima wrote:
>
>> At Sat, 19 Jul 2008 14:55:45 +0200,
>> Klaus D. Witzel wrote:
>>>
>>> Hi,
>>>
>>> I'm trying to successfully fileOut and fileIn class and method comments
>>> with characters codePoint <= 255 (the "european" range of byte size
>>> characters).
>>>
>>> Fileout works but the file looks to have prefix from #writeBOMOn: of
>>> UTF8TextConverter and file suffix is ".st" or ".cs". On fileIn this
>>> fails
>>> with syntax error :( and Google search did not help. Has anyone
>>> experience
>>> with source code fileOut/fileIn for the "european" character range?
>>>
>>> Did a quick shot on FileStream class>>#writeSourceCodeFrom:*, with
>>> #isAsciiString replaced by #isWideString (followed by ifFalse:ifTrue:),
>>> filed out again and then fileIn was happy again.
>>>
>>> I understand this is perhaps not really sort of bug, but want a bit
>>> more
>>> than just the ascii characters. So what do you Squeakers recommend, how
>>> should that be done in a Squeak platform compatible way?
>>
>> What version is it?
>
> Found the method in 3.10 and checked it against 3.9 (same method), but
> in 3.8 the method source code is garbled (decompiler shows it's the same
> method).
>
> Meanwhile I did:
>
> filedIn unpatched 3.9 from fileOut of my patched 3.10 (has no BOM):
> worked
> filedOut again from 3.9: (it wrote BOM as expected)
> filedIn 3.9 the fileOut from 3.9 (it has BOM): it worked
> filedIn 3.10 the fileOut from 3.9 (it has BOM): it worked
>
> Now I'm stuck, since the problem was not reproduced ? (did a lot of
> changes meanwhile to the class comment in question). Will have to go
> through the .changes and try to find the problematic chunk. FWIW the net
> effect was the compiler raised a SyntaxError complaining about the BOM
> characters.
>
> I'll let you know what I find.
Found that my .changes file also has some UTF8TextConverter problem (see
log below) which lets me not find the class comment change :(
Will have to start with a fresh stock .image and, if something happens
again, try to report it reproducable.
/Klaus
------------------
Error: Invalid utf8 input detected
25 July 2008 12:05:23 am
VM: Win32 - a SmalltalkImage
Image: Squeak3.10.2 [latest update: #7179]
SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir ...\SqueakDev
Trusted Dir ...\SqueakDev\kWitzel
Untrusted Dir ...\kWitzel
UTF8TextConverter(Object)>>error:
Receiver: an UTF8TextConverter
Arguments and temporary variables:
aString: 'Invalid utf8 input detected'
Receiver's instance variables:
acceptingEncodings: nil
currentCharSize: 1
forceToEncodingTag: nil
UTF8TextConverter>>errorMalformedInput
Receiver: an UTF8TextConverter
Arguments and temporary variables:
Receiver's instance variables:
acceptingEncodings: nil
currentCharSize: 1
forceToEncodingTag: nil
UTF8TextConverter>>nextFromStream:
Receiver: an UTF8TextConverter
Arguments and temporary variables:
aStream: MultiByteFileStream: '...\Squeak3.10.2...etc...
character1: $‰
value1: 137
character2: Character tab
value2: 9
unicode: nil
character3: Character tab
value3: 9
character4: nil
value4: nil
Receiver's instance variables:
acceptingEncodings: nil
currentCharSize: 1
forceToEncodingTag: nil
MultiByteFileStream>>next
Receiver: MultiByteFileStream:
'...\Squeak3.10.2-7179-basic.changes'...etc...
Arguments and temporary variables:
char: nil
secondChar: nil
state: nil
Receiver's instance variables:
--- The full stack ---
UTF8TextConverter(Object)>>error:
UTF8TextConverter>>errorMalformedInput
UTF8TextConverter>>nextFromStream:
MultiByteFileStream>>next
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MultiByteFileStream>>skipSeparators
MultiByteFileStream(PositionableStream)>>nextChunk
ChangeList class>>browseRecentLogOn:
ChangeList class>>browseRecentLogOnPath:
SimpleServiceEntry>>performServiceFor:
PluggableButtonMorph>>performAction
[] in PluggableButtonMorph>>mouseUp: {[:m | (m containsPoint: evt
cursorPoint) ifTrue: [m performAction]]}
Array(SequenceableCollection)>>do:
PluggableButtonMorph>>mouseUp:
PluggableButtonMorph(Morph)>>handleMouseUp:
MouseButtonEvent>>sentTo:
PluggableButtonMorph(Morph)>>handleEvent:
PluggableButtonMorph(Morph)>>handleFocusEvent:
[] in HandMorph>>sendFocusEvent:to:clear: {[ActiveHand := self.
ActiveEvent := anEvent. result := focusHolder han...]}
[] in PasteUpMorph>>becomeActiveDuring: {[aBlock value]}
BlockContext>>on:do:
PasteUpMorph>>becomeActiveDuring:
HandMorph>>sendFocusEvent:to:clear:
HandMorph>>sendEvent:focus:clear:
HandMorph>>sendMouseEvent:
HandMorph>>handleEvent:
HandMorph>>processEvents
[] in WorldState>>doOneCycleNowFor: {[:h | ActiveHand := h. h
processEvents. capturingGesture := capturingGest...]}
Array(SequenceableCollection)>>do:
WorldState>>handsDo:
WorldState>>doOneCycleNowFor:
WorldState>>doOneCycleFor:
PasteUpMorph>>doOneCycle
[] in Project class>>spawnNewProcess {[[World doOneCycle. Processor
yield. false] whileFalse. nil]}
[] in BlockContext>>newProcess {[self value. Processor terminateActive]}
More information about the Squeak-dev
mailing list
|