Hello!!!
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?
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?
Thanks. Alex.
Hello, Aleksei,
Sorry for the slow response.
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
beginners@lists.squeakfoundation.org