Hi Marcus, I think I just found a workaround: if you make Slot>>isVirtual to return *true* by default and override it in InstanceVariableSlot to return *false* the problem will be gone I don't want to subclass InstanceVariableSlot because it becomes impossible to see definition of class with slots in Browser and as soon as I add new instvars all old ones become default InstanceVariableSlot and not my custom. Cheers, Alex On Thu, Jan 22, 2015 at 5:32 PM, Marcus Denker <marcus.denker@inria.fr> wrote:
On 22 Jan 2015, at 17:20, Aliaksei Syrel <alex.syrel@gmail.com> wrote:
Hi,
We faced a problem with committing and loading packages with Slots. It seams like when loading a package, compiler first compiles a class that uses custom Slot and only then Slot itself. It leads to an error like MessageNotUnderstood: CustomSlot>>index:, but index: is implemented for sure! I'm using the latest image and vm.
I think the reason why this fails is that it loads the first all classes and then the methods. But this just makes another issue prominent:
I want to add a class in-between Slot and InstanceVariableSlot for people to subclass in this cas (AbstractInstanceVariableSlot). Because InstanceVariableSlot already needs the byte code level stuff, while Slot is the superclass of all Slots, even those that have no index.
I will do that as the next step.
How to reproduce:
1) Create CustomSlot:
Slot subclass: #CustomSlot instanceVariableNames: '' classVariableNames: '' category: 'CustomSlot-Test'
Implement the following methods:
index ^ index
index: anIndex index := anIndex
read: anObject ^ anObject instVarAt: index
write: aValue to: anObject ^ anObject instVarAt: index put: aValue.
2) Add our custom class:
Object subclass: #CutomClass slots: { #var => CustomSlot } classVariables: { } category: 'CustomSlot-Test'
3) Commit 4) Try to load in fresh image 5) Face error
Any suggestions?
Thanks, Alex