[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