On Apr 12, 2010, at 4:17 11PM, Igor Stasenko wrote:
Hello,
i attempted to load Alien-Core package into trunk image, and it failed.
One of the problem is override of recreateSpecialObjectsArray method..
I wonder, maybe we should design a nicer API for extending/reserving slots in special objects array, so it won't require overriding this method by every package which needs to extend special objects, like FFI or Alien.
Another aspect of replacing this method is , that it makes problematic to unload such package, in case one wants to unload it.
So, my proposal is to add a simple API to SmalltalkImage class, and in order to install additional special objects one should do like:
MyClass class>>initialize
Smalltalk registerSpecialObject: myObject at: 55. Smalltalk registerSpecialObject: myObject at: 56. ...
or:
Smalltalk registerSpecialObjects: #( x y z) startingAt: 56.
upon package unload, a reverse scheme should be supported:
MyClass class>>unload
Smalltalk unregisterSpecialObjectAt: 55. Smalltalk unregisterSpecialObjectAt: 56. ...
or:
Smalltalk unregisterSpecialObjects: 3 startingAt: 56.
what you think?
-- Best regards, Igor Stasenko AKA sig.
+1 for the overall idea. Implementation-wise, I'd also vote for raising errors in registerSpecialObject:at: if something other than myObject is already registered, changing to unregisterSpecialObject: at: in order to not unintentionally unregistering something else, and disallow unregisterSpecialObjects:startingAt: ;) Cheers, Henry