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