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

bacek at svn.parrot.org bacek at svn.parrot.org
Mon Dec 14 12:43:58 UTC 2009


Author: bacek
Date: Mon Dec 14 12:43:57 2009
New Revision: 43044
URL: https://trac.parrot.org/parrot/changeset/43044

Log:
Update callmethod(cc) to properly use CallContext.

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

Modified: branches/context_unify3/src/ops/object.ops
==============================================================================
--- branches/context_unify3/src/ops/object.ops	Mon Dec 14 12:43:38 2009	(r43043)
+++ branches/context_unify3/src/ops/object.ops	Mon Dec 14 12:43:57 2009	(r43044)
@@ -50,6 +50,7 @@
     PMC      * const object     = $1;
     STRING   * const meth       = $2;
     opcode_t * const next       = expr NEXT();
+    PMC      * call_object      = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
 
     PMC      * const method_pmc = VTABLE_find_method(interp, object, meth);
     opcode_t *dest              = NULL;
@@ -69,8 +70,7 @@
         }
     }
     else {
-        interp->current_object = object;
-        interp->current_cont   = NEED_CONTINUATION;
+        Parrot_pcc_prepare_call(interp, call_object, new_ret_continuation_pmc(interp, next), object);
         dest                   = VTABLE_invoke(interp, method_pmc, next);
     }
     goto ADDRESS(dest);
@@ -79,9 +79,9 @@
 op callmethodcc(invar PMC, invar PMC) :object_base :flow {
     opcode_t        *dest;
     opcode_t * const next  = expr NEXT();
+    PMC      * call_object      = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
 
-    interp->current_object = $1;
-    interp->current_cont   = NEED_CONTINUATION;
+    Parrot_pcc_prepare_call(interp, call_object, new_ret_continuation_pmc(interp, next), $1);
     dest                   = VTABLE_invoke(interp, $2, next);
 
     goto ADDRESS(dest);
@@ -91,6 +91,7 @@
     PMC      * const object     = $1;
     STRING   * const meth       = $2;
     opcode_t * const next       = expr NEXT();
+    PMC      * call_object      = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
 
     PMC      * const method_pmc = VTABLE_find_method(interp, object, meth);
     opcode_t *dest              = NULL;
@@ -102,8 +103,7 @@
             VTABLE_get_string(interp, VTABLE_get_class(interp, object)));
     }
     else {
-        interp->current_object = object;
-        interp->current_cont = $3;
+        Parrot_pcc_prepare_call(interp, call_object, $3, object);
         dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);
     }
     goto ADDRESS(dest);
@@ -113,11 +113,11 @@
     PMC      * const object     = $1;
     PMC      * const method_pmc = $2;
     opcode_t * const next       = expr NEXT();
+    PMC      * call_object      = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
 
     opcode_t *dest;
 
-    interp->current_object = object;
-    interp->current_cont = $3;
+    Parrot_pcc_prepare_call(interp, call_object, $3, object);
     dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);
     goto ADDRESS(dest);
 }


More information about the parrot-commits mailing list