[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