[svn:parrot] r44599 - branches/tt1477/src/call

plobsing at svn.parrot.org plobsing at svn.parrot.org
Wed Mar 3 02:30:27 UTC 2010


Author: plobsing
Date: Wed Mar  3 02:30:24 2010
New Revision: 44599
URL: https://trac.parrot.org/parrot/changeset/44599

Log:
make index parameter in callbacks given to Parrot_pcc_build_sig_object_from_callbacks meaningfull

Modified:
   branches/tt1477/src/call/args.c

Modified: branches/tt1477/src/call/args.c
==============================================================================
--- branches/tt1477/src/call/args.c	Tue Mar  2 20:45:34 2010	(r44598)
+++ branches/tt1477/src/call/args.c	Wed Mar  3 02:30:24 2010	(r44599)
@@ -889,6 +889,8 @@
     const INTVAL sig_len            = strlen(sig);
     INTVAL       in_return_sig      = 0;
     INTVAL       i;
+    INTVAL       param_idx          = 0;
+    INTVAL       ret_idx            = 0;
     int          append_pi          = 1;
 
     if (!sig_len)
@@ -909,19 +911,23 @@
             switch (type) {
               case 'I':
                 csr_push_pointer(interp, call_object,
-                            (void *)cbs->intval_ret(interp, call_info, i), PARROT_ARG_INTVAL);
+                            (void *)cbs->intval_ret(interp, call_info, ret_idx++),
+                            PARROT_ARG_INTVAL);
                 break;
               case 'N':
                 csr_push_pointer(interp, call_object,
-                            (void *)cbs->numval_ret(interp, call_info, i), PARROT_ARG_FLOATVAL);
+                            (void *)cbs->numval_ret(interp, call_info, ret_idx++),
+                            PARROT_ARG_FLOATVAL);
                 break;
               case 'S':
                 csr_push_pointer(interp, call_object,
-                            (void *)cbs->string_ret(interp, call_info, i), PARROT_ARG_STRING);
+                            (void *)cbs->string_ret(interp, call_info, ret_idx++),
+                            PARROT_ARG_STRING);
                 break;
               case 'P':
                 csr_push_pointer(interp, call_object,
-                            (void *)cbs->pmc_ret(interp, call_info, i), PARROT_ARG_PMC);
+                            (void *)cbs->pmc_ret(interp, call_info, ret_idx++),
+                            PARROT_ARG_PMC);
                 break;
               default:
                 Parrot_ex_throw_from_c_args(interp, NULL,
@@ -933,18 +939,21 @@
             /* Regular arguments just set the value */
             switch (type) {
               case 'I':
-                VTABLE_push_integer(interp, call_object, cbs->intval_arg(interp, call_info, i));
+                VTABLE_push_integer(interp, call_object,
+                    cbs->intval_arg(interp, call_info, param_idx++));
                 break;
               case 'N':
-                VTABLE_push_float(interp, call_object, cbs->numval_arg(interp, call_info, i));
+                VTABLE_push_float(interp, call_object,
+                    cbs->numval_arg(interp, call_info, param_idx++));
                 break;
               case 'S':
-                VTABLE_push_string(interp, call_object, cbs->string_arg(interp, call_info, i));
+                VTABLE_push_string(interp, call_object,
+                    cbs->string_arg(interp, call_info, param_idx++));
                 break;
               case 'P':
                 {
                     const INTVAL type_lookahead = sig[i+1];
-                    PMC * const pmc_arg = cbs->pmc_arg(interp, call_info, i);
+                    PMC * const pmc_arg = cbs->pmc_arg(interp, call_info, param_idx++);
                     if (type_lookahead == 'f') {
                          dissect_aggregate_arg(interp, call_object, pmc_arg);
                         i++; /* skip 'f' */


More information about the parrot-commits mailing list