Hello, Yoshiki.
Thanks for detailed answer. It was in image 3.8 from squeak.org
I fix problem by creating accessors to mentioned tables in String and overriding them in WideString. Also some small changes in Character and new class wideCharacterSet.
About "variableWordSubclass" and other. I have no words... To create class I send message to it superclass!!! It is beutiful way. I'd understand how it work only after question was posted. Before I thought, that it is a kind of 'keyword' :)
Alexei.
I have problems with WideString. (realy not with WideString, but debugger brings me to this class). When I send #beginsWith: message to WideString, squeak invokes String>>beginsWith: and this method use String>>findSubstring:in:startingAt:matchTable: For String matchTables (AsciiOrder CaseInsensitiveOrder CaseSensitiveOrder) contains 256 bytes. So when invoked 'matchTable at: myWideChar asciiValue + 1' -- i get error -- 'subscript is out of bounds'.
How to fix this? I must create my own huge tables for wide strings?
This must be a bug, I think. It is fixed in Squeakland image, but not incorporated into the mainstream yet. What was the version you found this?
And another question. From class definition for WideString 'String variableWordSubclass: #WideString' What means 'variableWordSubclass' and is it restrict me in some way, or I can ignore this?
There is a concept of the "variable class" in Smalltalk. If you take an instance of a normal class, its size is fixed (i.e., the instance has a number of slots that is defined by the "class shape"). And, each slot are (usually) named, and the name is used to access them in the user code.
For a variable class, its instances can have different size. For example, the instances of Array can be different size, but share the same behavior provided by the Array class. The slots are index by numbers.
A String in Squeak is like an Array. Each (sub-)instance of it can have different size. A "variable word class" means that a slot of its instance contains a 32-bit word (non-pointer), and a "variable byte class" means a slot is 8-bit wide (obviously a non-pointer).
The restriction? You cannot have a named instance variable in a non-pointer variable class.
-- Yoshiki
Hello Alexei,
you can also check at http://bugs.impara.de/view.php?id=3574 where i put another version of WideCharacterSet a few weeks ago.
Nicolas
Le Jeudi 29 Juin 2006 20:58, Алексей a écrit :
Hello, Yoshiki.
Thanks for detailed answer. It was in image 3.8 from squeak.org
I fix problem by creating accessors to mentioned tables in String and overriding them in WideString. Also some small changes in Character and new class wideCharacterSet.
Alexei.
beginners@lists.squeakfoundation.org