[svn:parrot] r44720 - branches/pcc_hackathon_6Mar10/src

allison at svn.parrot.org allison at svn.parrot.org
Sun Mar 7 00:25:12 UTC 2010


Author: allison
Date: Sun Mar  7 00:25:07 2010
New Revision: 44720
URL: https://trac.parrot.org/parrot/changeset/44720

Log:
[pcc] Updated more invocations from C to fetch return values after invoke.

Modified:
   branches/pcc_hackathon_6Mar10/src/exceptions.c
   branches/pcc_hackathon_6Mar10/src/extend.c
   branches/pcc_hackathon_6Mar10/src/multidispatch.c

Modified: branches/pcc_hackathon_6Mar10/src/exceptions.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/exceptions.c	Sun Mar  7 00:15:10 2010	(r44719)
+++ branches/pcc_hackathon_6Mar10/src/exceptions.c	Sun Mar  7 00:25:07 2010	(r44720)
@@ -261,7 +261,7 @@
     PMC     *sig_obj;
 
     va_start(args, sig);
-    sig_obj = Parrot_pcc_build_sig_object_from_varargs(interp, PMCNULL, sig, args);
+    sig_obj = Parrot_pcc_build_call_from_varargs(interp, PMCNULL, sig, &args);
     va_end(args);
 
     CALLSIGNATURE_is_exception_SET(sig_obj);

Modified: branches/pcc_hackathon_6Mar10/src/extend.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/extend.c	Sun Mar  7 00:15:10 2010	(r44719)
+++ branches/pcc_hackathon_6Mar10/src/extend.c	Sun Mar  7 00:25:07 2010	(r44720)
@@ -1047,13 +1047,16 @@
 {
     ASSERT_ARGS(Parrot_ext_call)
     va_list args;
-    PMC  *sig_object;
+    PMC  *call_obj;
+    char *arg_sig, *ret_sig;
+    Parrot_pcc_split_signature_string(interp, signature, &arg_sig, &ret_sig);
 
     va_start(args, signature);
-    sig_object = Parrot_pcc_build_sig_object_from_varargs(interp, PMCNULL, signature, args);
-    va_end(args);
+    call_obj = Parrot_pcc_build_call_from_varargs(interp, PMCNULL, arg_sig, &args);
 
-    Parrot_pcc_invoke_from_sig_object(interp, sub_pmc, sig_object);
+    Parrot_pcc_invoke_from_sig_object(interp, sub_pmc, call_obj);
+    Parrot_pcc_fill_params_from_varargs(interp, call_obj, ret_sig, &args);
+    va_end(args);
 }
 
 /*

Modified: branches/pcc_hackathon_6Mar10/src/multidispatch.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/multidispatch.c	Sun Mar  7 00:15:10 2010	(r44719)
+++ branches/pcc_hackathon_6Mar10/src/multidispatch.c	Sun Mar  7 00:25:07 2010	(r44720)
@@ -286,24 +286,25 @@
         ARGIN(const char *name), ARGIN(const char *sig), ...)
 {
     ASSERT_ARGS(Parrot_mmd_multi_dispatch_from_c_args)
-    PMC *sig_object, *sub;
-
+    PMC *call_obj, *sub;
     va_list args;
+    char *arg_sig, *ret_sig;
+    Parrot_pcc_split_signature_string(interp, sig, &arg_sig, &ret_sig);
+
     va_start(args, sig);
-    sig_object = Parrot_pcc_build_sig_object_from_varargs(interp, PMCNULL, sig, args);
-    va_end(args);
+    call_obj = Parrot_pcc_build_call_from_varargs(interp, PMCNULL, arg_sig, &args);
 
     /* Check the cache. */
     sub = Parrot_mmd_cache_lookup_by_types(interp, interp->op_mmd_cache, name,
-            VTABLE_get_pmc(interp, sig_object));
+            VTABLE_get_pmc(interp, call_obj));
 
     if (PMC_IS_NULL(sub)) {
         sub = Parrot_mmd_find_multi_from_sig_obj(interp,
-            Parrot_str_new_constant(interp, name), sig_object);
+            Parrot_str_new_constant(interp, name), call_obj);
 
         if (!PMC_IS_NULL(sub))
             Parrot_mmd_cache_store_by_types(interp, interp->op_mmd_cache, name,
-                    VTABLE_get_pmc(interp, sig_object), sub);
+                    VTABLE_get_pmc(interp, call_obj), sub);
     }
 
     if (PMC_IS_NULL(sub))
@@ -318,7 +319,9 @@
             VTABLE_name(interp, sub));
 #endif
 
-    Parrot_pcc_invoke_from_sig_object(interp, sub, sig_object);
+    Parrot_pcc_invoke_from_sig_object(interp, sub, call_obj);
+    Parrot_pcc_fill_params_from_varargs(interp, call_obj, ret_sig, &args);
+    va_end(args);
 }
 
 


More information about the parrot-commits mailing list