[svn:parrot] r41612 - branches/pcc_reapply/src/call
allison at svn.parrot.org
allison at svn.parrot.org
Fri Oct 2 12:19:30 UTC 2009
Author: allison
Date: Fri Oct 2 12:19:29 2009
New Revision: 41612
URL: https://trac.parrot.org/parrot/changeset/41612
Log:
[pcc] Add null call signature checking to C parameter passing, use the right
value for the count of passed return values.
Modified:
branches/pcc_reapply/src/call/pcc.c
Modified: branches/pcc_reapply/src/call/pcc.c
==============================================================================
--- branches/pcc_reapply/src/call/pcc.c Fri Oct 2 12:14:40 2009 (r41611)
+++ branches/pcc_reapply/src/call/pcc.c Fri Oct 2 12:19:29 2009 (r41612)
@@ -1098,7 +1098,7 @@
ASSERT_ARGS(Parrot_pcc_fill_params_from_c_args)
va_list args;
PMC *ctx = CURRENT_CONTEXT(interp);
- INTVAL positional_elements = VTABLE_elements(interp, call_object);
+ INTVAL positional_elements;
INTVAL param_count = 0;
STRING *param_name = NULL;
INTVAL param_index = 0;
@@ -1122,6 +1122,20 @@
if (PARROT_ERRORS_test(interp, PARROT_ERRORS_PARAM_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 (param_count > 0) {
+ if (err_check)
+ Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+ "too few arguments: 0 passed, %d expected",
+ param_count);
+ else
+ return;
+ }
+ }
+
+ positional_elements = VTABLE_elements(interp, call_object);
+
va_start(args, signature);
for (param_index = 0; param_index < param_count; param_index++) {
INTVAL param_flags = VTABLE_get_integer_keyed_int(interp,
@@ -1371,11 +1385,11 @@
/* A null call object is fine if there are no arguments and no returns. */
if (PMC_IS_NULL(call_object)) {
- if (return_list_elements > 0) {
+ 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",
- return_list_elements);
+ raw_return_count);
return;
}
}
More information about the parrot-commits
mailing list