Joseph Ryan writes:
> Dan Sugalski wrote:
> 
> >On Mon, 25 Aug 2003, Joseph Ryan wrote:
> >
> > 
> >
> >>So, I know how to use find_method to get a method from an object;
> >>but is there any way to dynamically add a method to a class?
> >>Basically, I want to do something like this:
> >>
> >>   newclass P2, "Foo"
> >>   new P1, P2
> >>   
> >>   addr I0, _Foo::somemethod
> >>   setmethod P1, "somemethod", I0
> >>   findmethod P0, P1, "somemethod"
> >>   invoke
> >>
> >>So, how do I do it? :)  
> >>   
> >>
> >
> >What's supposed to happen is that each class has a backing namespace, and 
> >methods all live in that namespace. Generally objects, no matter what 
> >their HLL class, will be PMCs that have subclassed (at the parrot level) 
> >ParrotObject.
> >
> >Anyway, for a perl/python/ruby object of class Foo, to add a new method 
> >you'd just add a new sub/method name/PMC binding to the Foo namespace.
> >
> 
> I'm a bit lost here; what does that mean?  How do I do it?  Does
> 
>    .sub _Foo::somemethod
>        print "Foo-ey goodness."
>    .end
> 
> add "somemethod" to the "Foo" namespace?  

No... well, imcc will probably support that eventually.  It would be
(note the conditional; i.e. you can't do this object stuff yet):

    .sub _main
        newsub $P0, .Method, __foo_somemethod
        global "Foo::somemethod" = $P0
        ...
    .end
    
    .sub __foo_somemethod
        print "Foo-ey goodness."
    .end

If C<global> is smart.  If not:

    .sub_main
        newsub $P0, .Method, __foo_somemethod
        $P1 = global "Foo::"
        $P1["somemethod"] = $P0
        ...
    .end

Note that __foo_somemethod is a completely arbitrary name.  It could
have been called _boozebar for all these ops care.

Luke

> Or would it have to be:
> 
>    .sub Foo::somemethod
>        print "Foo-ey goodness."
>    .end
> 
> Thanks for the reply,
> 
> - Joe
> 

Reply via email to