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