[Vm-dev] VM Maker: VMMaker-oscog.33.mcz
stephane ducasse
stephane.ducasse at gmail.com
Sun Sep 26 18:56:53 UTC 2010
> Eliot
>
> I wanted to understand what: ' Have various places check for isOopCOmpiledMethod:
> rather than isCompiledMethod: to allow SmallIntegers to be used as methods.'
> means
> 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).
Thanks for the explanation. I have to stop writing papers and learn new stuff.
Stef
More information about the Vm-dev
mailing list