[svn:parrot] r41658 - branches/pcc_reapply/src/call
bacek at svn.parrot.org
bacek at svn.parrot.org
Sat Oct 3 23:55:22 UTC 2009
Author: bacek
Date: Sat Oct 3 23:55:21 2009
New Revision: 41658
URL: https://trac.parrot.org/parrot/changeset/41658
Log:
Fix handling null CallSignature in Parrot_pcc_fill_returns_* functions.
Modified:
branches/pcc_reapply/src/call/args.c
Modified: branches/pcc_reapply/src/call/args.c
==============================================================================
--- branches/pcc_reapply/src/call/args.c Sat Oct 3 23:45:23 2009 (r41657)
+++ branches/pcc_reapply/src/call/args.c Sat Oct 3 23:55:21 2009 (r41658)
@@ -1109,8 +1109,8 @@
Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
"too many return values: %d passed, 0 expected",
raw_return_count);
- return;
}
+ return;
}
return_list = VTABLE_get_attr_str(interp, call_object, CONST_STRING(interp, "returns"));
@@ -1232,7 +1232,7 @@
va_list args;
INTVAL return_list_elements;
PMC *ctx = CURRENT_CONTEXT(interp);
- PMC * const return_list = VTABLE_get_attr_str(interp, call_object, CONST_STRING(interp, "returns"));
+ PMC * return_list;
INTVAL raw_return_count = 0;
INTVAL return_index = 0;
INTVAL return_list_index = 0;
@@ -1252,6 +1252,18 @@
if (PARROT_ERRORS_test(interp, PARROT_ERRORS_RESULT_COUNT_FLAG))
err_check = 1;
+ /* A null call object is fine if there are no arguments and no returns. */
+ if (PMC_IS_NULL(call_object)) {
+ if (raw_return_count > 0) {
+ if (err_check)
+ Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+ "too many return values: %d passed, 0 expected",
+ raw_return_count);
+ }
+ return;
+ }
+
+ return_list = VTABLE_get_attr_str(interp, call_object, CONST_STRING(interp, "returns"));
if (PMC_IS_NULL(return_list)) {
if (err_check)
Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
More information about the parrot-commits
mailing list