http://www.perlmonks.org?node_id=666383


in reply to [parrot] parrot prototype OO?

It's difficult to say what's going on without seeing code, but if I were to do this, I'd write a Prototype PMC in PIR that subclasses the Class PMC and overrides find_method(). You can also override its add_parent() when you clone an instance, so that the new instance can look back to its parent for non-overridden methods.

Replies are listed 'Best First'.
Re^2: [parrot] parrot prototype OO?
by jepri (Parson) on Feb 06, 2008 at 01:07 UTC
    There's not a lot of code - I was just trying parrot as-is, using only the provided PMCs. Thanks for the tip on PMCs, I wasn't sure if it were possible to write a full PMC in PIR.

    Now that I know rolling my own PMCs is the way to go, I'll go that way. Could you suggest an example of a PMC written in PIR? I'm only finding ones written in C.

    Edit: I just found your FizzBuzz article, working through that now.

    ___________________
    Jeremy
    I didn't believe in evil until I dated it.

Re^2: [parrot] parrot prototype OO?
by jepri (Parson) on Feb 06, 2008 at 03:31 UTC
    Hmmm, find_method seems to be called on the superclass, and not the class (or on the class and not the object). So if I try to use, say, objects, should I return a method that inspects the object (and its parent* slots) and then calls the correct method? Because that sounds like I'm implementing AUTOLOAD.

    Here's my naive code. I don't seem to be making good use of the class machinery so far:

    .namespace [ 'MyStuff'; 'TestProt' ] .sub 'autoload' :method #inspect object and parents here .end .sub 'find_method' :vtable .param pmc arg0 .param pmc arg1 .local pmc autoload new_method = find_name 'autoload' .return(new_method) .end .sub main :main $P1 = new [ 'MyStuff'; 'TestProt'] $P1.hi() .end

    ___________________
    Jeremy
    I didn't believe in evil until I dated it.