[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
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: pharo-project-bounces@lists.gforge.inria.fr [pharo-project-bounces@lists.gforge.inria.fr] On Behalf Of Mariano Martinez Peck [marianopeck@gmail.com] 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
On Mon, Dec 13, 2010 at 9:42 PM, Schwab,Wilhelm K <bschwab@anest.ufl.edu>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: pharo-project-bounces@lists.gforge.inria.fr [ pharo-project-bounces@lists.gforge.inria.fr] On Behalf Of Mariano Martinez Peck [marianopeck@gmail.com] 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
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 < marianopeck@gmail.com> wrote:
On Mon, Dec 13, 2010 at 9:42 PM, Schwab,Wilhelm K <bschwab@anest.ufl.edu>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: pharo-project-bounces@lists.gforge.inria.fr [ pharo-project-bounces@lists.gforge.inria.fr] On Behalf Of Mariano Martinez Peck [marianopeck@gmail.com] 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
participants (2)
-
Mariano Martinez Peck -
Schwab,Wilhelm K