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

Igor Stasenko siguctua at gmail.com
Sun Sep 26 16:15:52 UTC 2010


On 26 September 2010 18:07, Eliot Miranda <eliot.miranda at gmail.com> wrote:
>
>
>
> 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).

Squeak VM sends #run:with:in: to object-as-method.
In theory, if someone wants to use smallintegers as methods, he just
needs to implement this method.
But if it could impact performance, i'll vote for disabling this
feature for smallints, but not the rest of objects.
And of course VM should not crash when meeting badly-formed method dicts.

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



-- 
Best regards,
Igor Stasenko AKA sig.


More information about the Vm-dev mailing list