[Vm-dev] VM Maker: VMMaker-oscog.33.mcz

Eliot Miranda eliot.miranda at gmail.com
Sun Sep 26 15:07:33 UTC 2010


On Sun, Sep 26, 2010 at 4:45 AM, stephane ducasse <
stephane.ducasse at gmail.com> wrote:

>
> 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).

HTH
Eliot



>
> Stef
>
>
> >
> >
> > Name: VMMaker-oscog.33
> > Author: eem
> > Time: 25 September 2010, 7:13:51 am
> > UUID: 733b7c50-b973-4ca0-9831-5c84d09032bf
> > Ancestors: VMMaker-oscog.32
> >
> > OSCogVM:
> >  Support object-as-method:
> >       Eagerly evaluate the interpreter version of a primitive
> >       to ease the object-as-method implementation and to
> >       improve interpreter performance.
> >       Refuse to enter anything that isn't a CompiledMethod
> >       into the method-lookup cache to avoid open PICs having
> >       to check for valid compiled methods.
> >       Have various places check for isOopCOmpiledMethod:
> >       rather than isCompiledMethod: to allow SmallIntegers to
> >       be used as methods.
> > Interpreter:
> >       Have various places check for isOopCOmpiledMethod:
> >       rather than isCompiledMethod: to allow SmallIntegers to
> >       be used as methods.
> > Slang:
> >       support super sends by expanding them at translation
> >       time.  This allows CoInterpreter>>addMethodToCache
> >       to avoid cacheing non-compiled methods via a super
> >       send, avoiding duplicating SrackInterpreter's method.
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20100926/f5a8b500/attachment.htm


More information about the Vm-dev mailing list