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

Reply via email to