[svn:parrot] r40869 - in branches/context_pmc3: include/parrot src src/call
bacek at svn.parrot.org
bacek at svn.parrot.org
Sun Aug 30 11:16:45 UTC 2009
Author: bacek
Date: Sun Aug 30 11:16:44 2009
New Revision: 40869
URL: https://trac.parrot.org/parrot/changeset/40869
Log:
Add Context handlers accessors and use them
Modified:
branches/context_pmc3/include/parrot/call.h
branches/context_pmc3/src/call/context.c
branches/context_pmc3/src/scheduler.c
Modified: branches/context_pmc3/include/parrot/call.h
==============================================================================
--- branches/context_pmc3/include/parrot/call.h Sun Aug 30 11:16:15 2009 (r40868)
+++ branches/context_pmc3/include/parrot/call.h Sun Aug 30 11:16:44 2009 (r40869)
@@ -801,6 +801,12 @@
__attribute__nonnull__(2);
PARROT_EXPORT
+PARROT_CAN_RETURN_NULL
+PMC* Parrot_pcc_get_handlers(PARROT_INTERP, ARGIN(PMC *ctx))
+ __attribute__nonnull__(1)
+ __attribute__nonnull__(2);
+
+PARROT_EXPORT
INTVAL Parrot_pcc_get_HLL(PARROT_INTERP, ARGIN(PMC *ctx))
__attribute__nonnull__(1)
__attribute__nonnull__(2);
@@ -906,6 +912,14 @@
__attribute__nonnull__(2);
PARROT_EXPORT
+void Parrot_pcc_set_handers(PARROT_INTERP,
+ ARGIN(PMC *ctx),
+ ARGIN(PMC *handlers))
+ __attribute__nonnull__(1)
+ __attribute__nonnull__(2)
+ __attribute__nonnull__(3);
+
+PARROT_EXPORT
void Parrot_pcc_set_HLL(PARROT_INTERP, ARGIN(PMC *ctx), INTVAL hll)
__attribute__nonnull__(1)
__attribute__nonnull__(2);
@@ -1039,6 +1053,9 @@
#define ASSERT_ARGS_Parrot_pcc_get_continuation __attribute__unused__ int _ASSERT_ARGS_CHECK = \
PARROT_ASSERT_ARG(interp) \
|| PARROT_ASSERT_ARG(ctx)
+#define ASSERT_ARGS_Parrot_pcc_get_handlers __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+ PARROT_ASSERT_ARG(interp) \
+ || PARROT_ASSERT_ARG(ctx)
#define ASSERT_ARGS_Parrot_pcc_get_HLL __attribute__unused__ int _ASSERT_ARGS_CHECK = \
PARROT_ASSERT_ARG(interp) \
|| PARROT_ASSERT_ARG(ctx)
@@ -1095,6 +1112,10 @@
#define ASSERT_ARGS_Parrot_pcc_set_continuation __attribute__unused__ int _ASSERT_ARGS_CHECK = \
PARROT_ASSERT_ARG(interp) \
|| PARROT_ASSERT_ARG(ctx)
+#define ASSERT_ARGS_Parrot_pcc_set_handers __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+ PARROT_ASSERT_ARG(interp) \
+ || PARROT_ASSERT_ARG(ctx) \
+ || PARROT_ASSERT_ARG(handlers)
#define ASSERT_ARGS_Parrot_pcc_set_HLL __attribute__unused__ int _ASSERT_ARGS_CHECK = \
PARROT_ASSERT_ARG(interp) \
|| PARROT_ASSERT_ARG(ctx)
Modified: branches/context_pmc3/src/call/context.c
==============================================================================
--- branches/context_pmc3/src/call/context.c Sun Aug 30 11:16:15 2009 (r40868)
+++ branches/context_pmc3/src/call/context.c Sun Aug 30 11:16:44 2009 (r40869)
@@ -393,6 +393,46 @@
/*
+=item C<PMC* Parrot_pcc_get_handlers(PARROT_INTERP, PMC *ctx)>
+
+Get scheduler handlers.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+PARROT_CAN_RETURN_NULL
+PMC*
+Parrot_pcc_get_handlers(PARROT_INTERP, ARGIN(PMC *ctx))
+{
+ ASSERT_ARGS(Parrot_pcc_get_handlers)
+ Parrot_Context *c = Parrot_pcc_get_context(interp, ctx);
+ return c->handlers;
+}
+
+
+/*
+
+=item C<void Parrot_pcc_set_handers(PARROT_INTERP, PMC *ctx, PMC *handlers)>
+
+Set scheduler handlers.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+void
+Parrot_pcc_set_handers(PARROT_INTERP, ARGIN(PMC *ctx), ARGIN(PMC *handlers))
+{
+ ASSERT_ARGS(Parrot_pcc_set_handers)
+ Parrot_Context *c = Parrot_pcc_get_context(interp, ctx);
+ c->handlers = handlers;
+}
+
+/*
+
=item C<PMC* Parrot_pcc_get_continuation(PARROT_INTERP, PMC *ctx)>
Get continuation of Context.
Modified: branches/context_pmc3/src/scheduler.c
==============================================================================
--- branches/context_pmc3/src/scheduler.c Sun Aug 30 11:16:15 2009 (r40868)
+++ branches/context_pmc3/src/scheduler.c Sun Aug 30 11:16:44 2009 (r40869)
@@ -482,10 +482,10 @@
Parrot_cx_add_handler_local(PARROT_INTERP, ARGIN(PMC *handler))
{
ASSERT_ARGS(Parrot_cx_add_handler_local)
- if (PMC_IS_NULL(CURRENT_CONTEXT_FIELD(interp, handlers)))
- CURRENT_CONTEXT_FIELD(interp, handlers) = pmc_new(interp, enum_class_ResizablePMCArray);
+ if (PMC_IS_NULL(Parrot_pcc_get_handlers(interp, interp->ctx)))
+ Parrot_pcc_set_handers(interp, interp->ctx, pmc_new(interp, enum_class_ResizablePMCArray));
- VTABLE_unshift_pmc(interp, CURRENT_CONTEXT_FIELD(interp, handlers), handler);
+ VTABLE_unshift_pmc(interp, Parrot_pcc_get_handlers(interp, interp->ctx), handler);
}
@@ -506,7 +506,7 @@
Parrot_cx_delete_handler_local(PARROT_INTERP, ARGIN(STRING *handler_type))
{
ASSERT_ARGS(Parrot_cx_delete_handler_local)
- PMC *handlers = CURRENT_CONTEXT_FIELD(interp, handlers);
+ PMC *handlers = Parrot_pcc_get_handlers(interp, interp->ctx);
if (PMC_IS_NULL(handlers))
Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
@@ -577,7 +577,7 @@
Parrot_cx_count_handlers_local(PARROT_INTERP, ARGIN(STRING *handler_type))
{
ASSERT_ARGS(Parrot_cx_count_handlers_local)
- PMC *handlers = CURRENT_CONTEXT_FIELD(interp, handlers);
+ PMC *handlers = Parrot_pcc_get_handlers(interp, interp->ctx);
INTVAL elements;
if (PMC_IS_NULL(handlers))
@@ -867,8 +867,8 @@
*/
context = Parrot_pcc_get_caller_ctx(interp, keep_context);
keep_context = NULL;
- if (context && !PMC_IS_NULL(CONTEXT_FIELD(interp, context, handlers)))
- iter = VTABLE_get_iter(interp, CONTEXT_FIELD(interp, context, handlers));
+ if (context && !PMC_IS_NULL(Parrot_pcc_get_handlers(interp, context)))
+ iter = VTABLE_get_iter(interp, Parrot_pcc_get_handlers(interp, context));
else
iter = PMCNULL;
}
@@ -884,8 +884,8 @@
}
else {
context = CONTEXT(interp);
- if (!PMC_IS_NULL(CONTEXT_FIELD(interp, context, handlers)))
- iter = VTABLE_get_iter(interp, CONTEXT_FIELD(interp, context, handlers));
+ if (!PMC_IS_NULL(Parrot_pcc_get_handlers(interp, context)))
+ iter = VTABLE_get_iter(interp, Parrot_pcc_get_handlers(interp, context));
}
}
@@ -919,8 +919,8 @@
/* Continue the search in the next context up the chain. */
context = Parrot_pcc_get_caller_ctx(interp, context);
- if (context && !PMC_IS_NULL(CONTEXT_FIELD(interp, context, handlers)))
- iter = VTABLE_get_iter(interp, CONTEXT_FIELD(interp, context, handlers));
+ if (context && !PMC_IS_NULL(Parrot_pcc_get_handlers(interp, context)))
+ iter = VTABLE_get_iter(interp, Parrot_pcc_get_handlers(interp, context));
else
iter = PMCNULL;
}
More information about the parrot-commits
mailing list