Re: Is SmallInteger a really too dangerous class?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: Is SmallInteger a really too dangerous class?

Schwab,Wilhelm K
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: [hidden email] [[hidden email]] On Behalf Of Mariano Martinez Peck [[hidden email]]
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 | Threaded
Open this post in threaded view
|

Re: Is SmallInteger a really too dangerous class?

Mariano Martinez Peck


On Mon, Dec 13, 2010 at 9:42 PM, Schwab,Wilhelm K <[hidden email]> wrote:
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.

Hi Bill, thanks. Yes, in SqueakVM it is the same...but I am adding an instVar to the SmallInteger CLASS, not to their instances ;)
but still...,maybe the VM assumes that the SmallInteger CLASS is of certain fixed size.

mariano
 

Bill


________________________________________
From: [hidden email] [[hidden email]] On Behalf Of Mariano Martinez Peck [[hidden email]]
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 | Threaded
Open this post in threaded view
|

Re: Is SmallInteger a really too dangerous class?

Mariano Martinez Peck
Ups....you are right bill, my example was wrong....it should be:

SmallInteger class >> initialize
    self addInstVarName: 'Zaraza'.



On Mon, Dec 13, 2010 at 10:05 PM, Mariano Martinez Peck <[hidden email]> wrote:


On Mon, Dec 13, 2010 at 9:42 PM, Schwab,Wilhelm K <[hidden email]> wrote:
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.

Hi Bill, thanks. Yes, in SqueakVM it is the same...but I am adding an instVar to the SmallInteger CLASS, not to their instances ;)
but still...,maybe the VM assumes that the SmallInteger CLASS is of certain fixed size.

mariano
 

Bill


________________________________________
From: [hidden email] [[hidden email]] On Behalf Of Mariano Martinez Peck [[hidden email]]
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