[svn:parrot] r43089 - branches/context_unify3/src/ops

bacek at svn.parrot.org bacek at svn.parrot.org
Wed Dec 16 08:33:43 UTC 2009


Author: bacek
Date: Wed Dec 16 08:33:43 2009
New Revision: 43089
URL: https://trac.parrot.org/parrot/changeset/43089

Log:
Merge CallSignature for tailcallmethod(cc).

Modified:
   branches/context_unify3/src/ops/object.ops

Modified: branches/context_unify3/src/ops/object.ops
==============================================================================
--- branches/context_unify3/src/ops/object.ops	Wed Dec 16 08:33:22 2009	(r43088)
+++ branches/context_unify3/src/ops/object.ops	Wed Dec 16 08:33:43 2009	(r43089)
@@ -129,6 +129,7 @@
     PMC      * const object     = $1;
     STRING   * const meth       = $2;
     PMC      * const method_pmc = VTABLE_find_method(interp, object, meth);
+    PMC      * const ctx        = CURRENT_CONTEXT(interp);
 
     opcode_t *dest;
 
@@ -138,9 +139,10 @@
             VTABLE_get_string(interp, VTABLE_get_class(interp, object)));
     }
     else {
-        interp->current_cont = Parrot_pcc_get_continuation(interp, CURRENT_CONTEXT(interp));
-        PObj_get_FLAGS(interp->current_cont) |= SUB_FLAG_TAILCALL;
+        interp->current_cont = Parrot_pcc_get_continuation(interp, ctx);
+        SUB_FLAG_TAILCALL_SET(interp->current_cont);
         interp->current_object = object;
+        Parrot_pcc_merge_signature_for_tailcall(interp, ctx, Parrot_pcc_get_signature(interp, ctx));
         dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);
     }
     goto ADDRESS(dest);
@@ -150,12 +152,14 @@
     opcode_t * const next       = expr NEXT();
     PMC      * const object     = $1;
     PMC      * const method_pmc = $2;
+    PMC      * const ctx        = CURRENT_CONTEXT(interp);
 
     opcode_t *dest;
 
-    interp->current_cont = Parrot_pcc_get_continuation(interp, CURRENT_CONTEXT(interp));
-    PObj_get_FLAGS(interp->current_cont) |= SUB_FLAG_TAILCALL;
+    interp->current_cont = Parrot_pcc_get_continuation(interp, ctx);
+    SUB_FLAG_TAILCALL_SET(interp->current_cont);
     interp->current_object = object;
+    Parrot_pcc_merge_signature_for_tailcall(interp, ctx, Parrot_pcc_get_signature(interp, ctx));
     dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);
     goto ADDRESS(dest);
 }


More information about the parrot-commits mailing list