[svn:parrot] r43042 - in branches/context_unify3: include/parrot src/call
bacek at svn.parrot.org
bacek at svn.parrot.org
Mon Dec 14 12:43:19 UTC 2009
Author: bacek
Date: Mon Dec 14 12:43:19 2009
New Revision: 43042
URL: https://trac.parrot.org/parrot/changeset/43042
Log:
Factor out prepare_call function
Modified:
branches/context_unify3/include/parrot/call.h
branches/context_unify3/src/call/pcc.c
Modified: branches/context_unify3/include/parrot/call.h
==============================================================================
--- branches/context_unify3/include/parrot/call.h Mon Dec 14 12:42:55 2009 (r43041)
+++ branches/context_unify3/include/parrot/call.h Mon Dec 14 12:43:19 2009 (r43042)
@@ -82,6 +82,15 @@
__attribute__nonnull__(3);
PARROT_EXPORT
+void Parrot_pcc_prepare_call(PARROT_INTERP,
+ ARGIN(PMC *call_object),
+ ARGIN(PMC *ret_cont),
+ ARGIN_NULLOK(PMC *current_object))
+ __attribute__nonnull__(1)
+ __attribute__nonnull__(2)
+ __attribute__nonnull__(3);
+
+PARROT_EXPORT
void Parrot_PCCINVOKE(PARROT_INTERP,
ARGIN(PMC* pmc),
ARGMOD(STRING *method_name),
@@ -109,6 +118,10 @@
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(sub_obj) \
, PARROT_ASSERT_ARG(sig))
+#define ASSERT_ARGS_Parrot_pcc_prepare_call __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+ PARROT_ASSERT_ARG(interp) \
+ , PARROT_ASSERT_ARG(call_object) \
+ , PARROT_ASSERT_ARG(ret_cont))
#define ASSERT_ARGS_Parrot_PCCINVOKE __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(pmc) \
Modified: branches/context_unify3/src/call/pcc.c
==============================================================================
--- branches/context_unify3/src/call/pcc.c Mon Dec 14 12:42:55 2009 (r43041)
+++ branches/context_unify3/src/call/pcc.c Mon Dec 14 12:43:19 2009 (r43042)
@@ -253,6 +253,34 @@
}
/*
+
+=item C<void Parrot_pcc_prepare_call(PARROT_INTERP, PMC *call_object, PMC
+*ret_cont, PMC *current_object)>
+
+Prepare and push CallContext for invoke Sub.
+
+TODO Invent better name for it.
+
+=cut
+
+*/
+PARROT_EXPORT
+void
+Parrot_pcc_prepare_call(PARROT_INTERP, ARGIN(PMC *call_object),
+ ARGIN(PMC *ret_cont), ARGIN_NULLOK(PMC *current_object))
+{
+ ASSERT_ARGS(Parrot_pcc_prepare_call)
+
+ Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), call_object);
+ Parrot_pcc_init_context(interp, call_object, CURRENT_CONTEXT(interp));
+ Parrot_pcc_set_caller_ctx(interp, call_object, CURRENT_CONTEXT(interp));
+ Parrot_pcc_set_continuation(interp, call_object, ret_cont);
+ interp->current_cont = ret_cont;
+ interp->current_object = current_object;
+ CURRENT_CONTEXT(interp) = call_object;
+}
+
+/*
=item C<void Parrot_pcc_invoke_from_sig_object(PARROT_INTERP, PMC *sub_obj, PMC
*call_object)>
@@ -275,12 +303,7 @@
opcode_t *dest;
PMC * const ret_cont = new_ret_continuation_pmc(interp, NULL);
- Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), call_object);
- Parrot_pcc_init_context(interp, call_object, CURRENT_CONTEXT(interp));
- Parrot_pcc_set_caller_ctx(interp, call_object, CURRENT_CONTEXT(interp));
- Parrot_pcc_set_continuation(interp, call_object, ret_cont);
- interp->current_cont = ret_cont;
- CURRENT_CONTEXT(interp) = call_object;
+ Parrot_pcc_prepare_call(interp, call_object, ret_cont, NULL);
/* Invoke the function */
dest = VTABLE_invoke(interp, sub_obj, NULL);
More information about the parrot-commits
mailing list