Mariano, SmallInteger is handled as (in Dolphin parlance) as an immediate object, meaning that they are encoded entirely in the object pointer; as such, they can't have instance variables. Object cannot have ivs either, because it has subclasses that are so constrained.
Bill ________________________________________ From: [email protected] [[email protected]] On Behalf Of Mariano Martinez Peck [[email protected]] Sent: Monday, December 13, 2010 3:16 PM To: Pharo Development; Squeak Development Discussion Virtual Machine Subject: [Pharo-project] Is SmallInteger a really too dangerous class? Hi folks. Sorry for the cross-post, I am not sure if it is image or vm problem. If I implement this: SmallInteger >> initialize self addInstVarName: 'Zaraza'. I have the error: 'SmallInteger cannot be changed' This is because SmallInteger is in the ClassBuilder >> tooDangerousClasses and the error is in ClassBuilder >> name: className inEnvironment: env subclassOf: newSuper type: type instanceVariableNames: instVarString classVariableNames: classVarString poolDictionaries: poolString category: category unsafe: unsafe Now....since this is Smalltalk, I can just comment something, continue, or any other kind of hack so that I can add class variables to SmallInetger. For my CompiledMethod proxies stuff, I am using SmallIntegers and I have some crashes (one is due to a corrupt heap and Eliot said something about sizes)...I wonder if this is related to this...So the question is: is really SMallInteger a too dangerous class so that it cannot be changed? not even adding a class variable??? does the VM assume that the class SmallInetger has a fixed size? if true, where? Thanks in advance Mariano
