[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