[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