[svn:parrot] r40461 - in branches/pcc_arg_unify/src: . interp ops

allison at svn.parrot.org allison at svn.parrot.org
Sun Aug 9 02:21:19 UTC 2009


Author: allison
Date: Sun Aug  9 02:21:18 2009
New Revision: 40461
URL: https://trac.parrot.org/parrot/changeset/40461

Log:
[pcc] Updates for new C sub and method calling interface in core subsystems.

Modified:
   branches/pcc_arg_unify/src/events.c
   branches/pcc_arg_unify/src/interp/inter_cb.c
   branches/pcc_arg_unify/src/ops/pic.ops
   branches/pcc_arg_unify/src/packfile.c
   branches/pcc_arg_unify/src/scheduler.c
   branches/pcc_arg_unify/src/thread.c
   branches/pcc_arg_unify/src/utils.c

Modified: branches/pcc_arg_unify/src/events.c
==============================================================================
--- branches/pcc_arg_unify/src/events.c	Sun Aug  9 02:07:32 2009	(r40460)
+++ branches/pcc_arg_unify/src/events.c	Sun Aug  9 02:21:18 2009	(r40461)
@@ -1471,8 +1471,8 @@
             break;
         case EVENT_TYPE_TIMER:
             /* run ops, save registers */
-            Parrot_runops_fromc_args_event(interp,
-                    event->u.timer_event.sub, "v");
+            Parrot_pcc_invoke_sub_from_c_args(interp,
+                    event->u.timer_event.sub, "->");
             break;
         case EVENT_TYPE_CALL_BACK:
             edebug((stderr, "starting user cb\n"));
@@ -1481,9 +1481,9 @@
             break;
         case EVENT_TYPE_IO:
             edebug((stderr, "starting io handler\n"));
-            Parrot_runops_fromc_args_event(interp,
+            Parrot_pcc_invoke_sub_from_c_args(interp,
                     event->u.io_event.handler,
-                    "vPP",
+                    "PP->",
                     event->u.io_event.pio,
                     event->u.io_event.user_data);
             break;

Modified: branches/pcc_arg_unify/src/interp/inter_cb.c
==============================================================================
--- branches/pcc_arg_unify/src/interp/inter_cb.c	Sun Aug  9 02:07:32 2009	(r40460)
+++ branches/pcc_arg_unify/src/interp/inter_cb.c	Sun Aug  9 02:21:18 2009	(r40461)
@@ -294,7 +294,7 @@
     PMC     *sub;
     STRING  *sig_str;
     char    *p;
-    char     pasm_sig[4];
+    char     pasm_sig[5];
     INTVAL   i_param;
     PMC     *p_param;
     void    *param = NULL;      /* avoid -Ox warning */
@@ -309,13 +309,12 @@
     p         = sig_str->strstart;
     ++p;     /* Skip return type */
 
-    pasm_sig[0] = 'v';  /* no return value supported yet */
-    pasm_sig[1] = 'P';
+    pasm_sig[0] = 'P';
     if (*p == 'U') /* user_data Z in pdd16 */
         ++p;       /* p is now type of external data */
     switch (*p) {
         case 'v':
-            pasm_sig[2] = 'v';
+            pasm_sig[1] = 'v';
             break;
 #if 0
         case '2':
@@ -334,7 +333,7 @@
         case 'c':
             i_param = (INTVAL)(char)(long)external_data;
 case_I:
-            pasm_sig[2] = 'I';
+            pasm_sig[1] = 'I';
             param = (void*) i_param;
             break;
 #if 0
@@ -349,24 +348,26 @@
             /* created a UnManagedStruct */
             p_param = pmc_new(interp, enum_class_UnManagedStruct);
             VTABLE_set_pointer(interp, p_param, external_data);
-            pasm_sig[2] = 'P';
+            pasm_sig[1] = 'P';
             param = (void*) p_param;
             break;
 #if 0
         case 'P':
-            pasm_sig[2] = 'P';
+            pasm_sig[1] = 'P';
             break;
 #endif
         case 't':
-            pasm_sig[2] = 'S';
+            pasm_sig[1] = 'S';
             param = Parrot_str_new(interp, external_data, 0);
             break;
         default:
             Parrot_ex_throw_from_c_args(interp, NULL, 1,
                 "unhandled signature char '%c' in run_cb", *p);
     }
-    pasm_sig[3] = '\0';
-    Parrot_runops_fromc_args_event(interp, sub, pasm_sig,
+    pasm_sig[2] = '-';
+    pasm_sig[3] = '>';  /* no return value supported yet */
+    pasm_sig[4] = '\0';
+    Parrot_pcc_invoke_sub_from_c_args(interp, sub, pasm_sig,
             user_data, param);
 }
 /*

Modified: branches/pcc_arg_unify/src/ops/pic.ops
==============================================================================
--- branches/pcc_arg_unify/src/ops/pic.ops	Sun Aug  9 02:07:32 2009	(r40460)
+++ branches/pcc_arg_unify/src/ops/pic.ops	Sun Aug  9 02:21:18 2009	(r40461)
@@ -244,6 +244,10 @@
     void **pred_pc;
     INTVAL i, n_args, *sig_bits;
     PMC *sig;
+    opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                        EXCEPTION_INVALID_OPERATION,
+                        "Impossible call, poking into low-level args");
+    goto ADDRESS(handler);
 
     ctx = CONTEXT(interp);
     mic = (Parrot_MIC *) cur_opcode[1];

Modified: branches/pcc_arg_unify/src/packfile.c
==============================================================================
--- branches/pcc_arg_unify/src/packfile.c	Sun Aug  9 02:07:32 2009	(r40460)
+++ branches/pcc_arg_unify/src/packfile.c	Sun Aug  9 02:21:18 2009	(r40461)
@@ -683,7 +683,7 @@
 
     CONTEXT(interp)->constants = interp->code->const_table->constants;
 
-    retval           = (PMC *)Parrot_runops_fromc_args(interp, sub_pmc, "P");
+    Parrot_pcc_invoke_sub_from_c_args(interp, sub_pmc, "->P", &retval);
     interp->run_core = old;
 
     return retval;

Modified: branches/pcc_arg_unify/src/scheduler.c
==============================================================================
--- branches/pcc_arg_unify/src/scheduler.c	Sun Aug  9 02:07:32 2009	(r40460)
+++ branches/pcc_arg_unify/src/scheduler.c	Sun Aug  9 02:21:18 2009	(r40461)
@@ -950,8 +950,8 @@
                     Parrot_floatval_time());
 #endif
     if (!PMC_IS_NULL(timer_struct->codeblock)) {
-        Parrot_runops_fromc_args_event(interp,
-                timer_struct->codeblock, "v");
+        Parrot_pcc_invoke_sub_from_c_args(interp,
+                timer_struct->codeblock, "->");
     }
 }
 

Modified: branches/pcc_arg_unify/src/thread.c
==============================================================================
--- branches/pcc_arg_unify/src/thread.c	Sun Aug  9 02:07:32 2009	(r40460)
+++ branches/pcc_arg_unify/src/thread.c	Sun Aug  9 02:21:18 2009	(r40461)
@@ -532,7 +532,7 @@
         Parrot_ex_add_c_handler(interp, &jump_point);
         Parrot_unblock_GC_mark(interp);
         Parrot_unblock_GC_sweep(interp);
-        ret_val = Parrot_runops_fromc_args(interp, sub_pmc, "PF", sub_arg);
+        Parrot_pcc_invoke_sub_from_c_args(interp, sub_pmc, "P->P", sub_arg, &ret_val);
     }
 
     /* thread is finito */

Modified: branches/pcc_arg_unify/src/utils.c
==============================================================================
--- branches/pcc_arg_unify/src/utils.c	Sun Aug  9 02:07:32 2009	(r40460)
+++ branches/pcc_arg_unify/src/utils.c	Sun Aug  9 02:21:18 2009	(r40461)
@@ -906,6 +906,7 @@
 COMPARE(PARROT_INTERP, ARGIN(void *a), ARGIN(void *b), ARGIN(PMC *cmp))
 {
     ASSERT_ARGS(COMPARE)
+    INTVAL result;
     if (PMC_IS_NULL(cmp))
         return VTABLE_cmp(interp, (PMC *)a, (PMC *)b);
 
@@ -914,7 +915,8 @@
         return f(interp, a, b);
     }
 
-    return Parrot_runops_fromc_args_reti(interp, cmp, "IPP", a, b);
+    Parrot_pcc_invoke_sub_from_c_args(interp, cmp, "PP->I", a, b, &result);
+    return result;
 }
 
 /*


More information about the parrot-commits mailing list