[Vm-dev] Object>>#at:put: reports improper store when everything
andreas.raab at gmx.de
Wed Apr 2 08:22:22 UTC 2008
André Wendt wrote:
> I just stumble upon this: Object>>#at:put: calls <primitive:61>. If that
> fails, the following lines read
> index isInteger ifTrue:
> [self class isVariable
> ifTrue: [(index >= 1 and: [index <= self size])
> ifTrue: [self errorImproperStore]
> Why is it an improper store if the index is an integer, the receiver
> class is variable, and the index is within bounds? Someone please
> enlighten me...
Because it's the only failure mode that's left. It happens when you
create non-pointer subclasses, for example:
Object variableWordSubclass: #MyWordArray
wa := MyWordArray new: 10.
wa at: 1 put: 0. "works"
wa at: 2 put: nil. "fails"
wa at: 3 put: -1. "fails"
wa at: 4 put: 16r100000000. "fails"
wa at: 5 put: Smalltalk. "fails"
> (If this is merely reporting "there was an error in the primitive
> although everything's alright", then I feel the message should be
> something other than "Improper store into indexable object".)
Think about this for a second. What possible other failure mode could
there be in the at:put: primitive?
More information about the Vm-dev