[Vm-dev] VM Maker: VMMaker-oscog.33.mcz
stephane.ducasse at gmail.com
Sun Sep 26 20:15:40 UTC 2010
should I conclude that before your change even the default old vm would crash when we put a SmallInteger in a methodDict?
Because if I would have know I would not ask my question. I thought it was for something else you had in mind.
> I wanted to understand what: ' Have various places check for isOopCOmpiledMethod:
> rather than isCompiledMethod: to allow SmallIntegers to be used as methods.'
> in which circumstances do we want to have smalltalkIntegers used as methods?
> when we put an object instead of a compiled method and that by accident this is an integer?
> Looking at the code for the standard Interpreter, if anyone tried
> self class addSelector: #foo withMethod: 0.
> self foo.
> then the VM would crash trying to determine if 0 was a compiled method because the VM uses isCompiledMethod: and isCompiledMethod: does not (and should not, because it is used elsewhere) guard against a tagged object. isOopCompiledMethod: does guard against a tagged object:
> isOopCompiledMethod: oop
> ^(self isNonIntegerObject: oop) and: [self isCompiledMethod: oop]
> isCompiledMethod: obj
> ^(self formatOf: obj) >= 12
> So in practice it's not an issue; presumably no-one is using SmallIntegers as methods ("Doctor it hurts when I..."). But if the VM provides a facility it is nice for it to provide that facility robustly (if there is no significant impact on performance).
More information about the Vm-dev