Author: mdiep
Date: Thu Mar  8 09:12:07 2007
New Revision: 17385

Modified:
   trunk/src/pmc/delegate.pmc
   trunk/t/pmc/parrotobject.t

Log:
[core]:
Really fix the invoke :vtable for ParrotObjects. Don't enter a new runloop;
just invoke the Sub, which will generate a RetContinuation. This addresses
#41732 - [BUG] parrot objects segfault on improper invoke override.


Modified: trunk/src/pmc/delegate.pmc
==============================================================================
--- trunk/src/pmc/delegate.pmc  (original)
+++ trunk/src/pmc/delegate.pmc  Thu Mar  8 09:12:07 2007
@@ -213,9 +213,8 @@
         PMC *sub = Parrot_find_vtable_meth(interp, pmc, meth_v);
         if (PMC_IS_NULL(sub))
             sub = find_or_die(interp, pmc, meth);
-        (void *)Parrot_run_meth_fromc_args(interp, sub, pmc, meth, "??");
-
-        return next;
+        INTERP->current_object = SELF;
+        return VTABLE_invoke(interp, sub, next);
     }
 
 }

Modified: trunk/t/pmc/parrotobject.t
==============================================================================
--- trunk/t/pmc/parrotobject.t  (original)
+++ trunk/t/pmc/parrotobject.t  Thu Mar  8 09:12:07 2007
@@ -211,7 +211,7 @@
 got here
 OUT
 
-pir_output_is(<<'CODE', <<'OUT', 'params/returns from overridden invoke', 
'todo' => 'not sure how to do this yet');
+pir_output_is(<<'CODE', <<'OUT', 'params/returns from overridden invoke');
 .namespace ['Foo']
 
 .sub invoke :vtable
@@ -234,10 +234,10 @@
 3
 OUT
 
-pir_output_like( <<'CODE', <<'OUT', 'RT#41732', 'todo' => 'not sure how to do 
this yet');
+pir_output_like( <<'CODE', <<'OUT', 'RT#41732');
 .namespace ['Foo']
 
-.sub __invoke :method
+.sub __invoke
   .param pmc a
   say 'hi'
 .end

Reply via email to