[svn:parrot] r40862 - in branches/context_pmc3: include/parrot src/call src/ops

bacek at svn.parrot.org bacek at svn.parrot.org
Sun Aug 30 09:53:51 UTC 2009


Author: bacek
Date: Sun Aug 30 09:53:47 2009
New Revision: 40862
URL: https://trac.parrot.org/parrot/changeset/40862

Log:
[core] Add results_signature accessor to Context and use it

Modified:
   branches/context_pmc3/include/parrot/call.h
   branches/context_pmc3/src/call/context.c
   branches/context_pmc3/src/call/pcc.c
   branches/context_pmc3/src/ops/core.ops

Modified: branches/context_pmc3/include/parrot/call.h
==============================================================================
--- branches/context_pmc3/include/parrot/call.h	Sun Aug 30 09:24:34 2009	(r40861)
+++ branches/context_pmc3/include/parrot/call.h	Sun Aug 30 09:53:47 2009	(r40862)
@@ -833,6 +833,11 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
+PMC* Parrot_pcc_get_results_signature(PARROT_INTERP, ARGIN(PMC *ctx))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_EXPORT
 PARROT_CAN_RETURN_NULL
 STRING* Parrot_pcc_get_string_constant(PARROT_INTERP,
     ARGIN(PMC *ctx),
@@ -922,6 +927,13 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
+void Parrot_pcc_set_results_signature(PARROT_INTERP,
+    ARGIN(PMC *ctx),
+    ARGIN_NULLOK(PMC *sig))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_EXPORT
 void Parrot_pcc_set_sub(PARROT_INTERP,
     ARGIN(PMC *ctx),
     ARGIN_NULLOK(PMC *sub))
@@ -974,6 +986,10 @@
 #define ASSERT_ARGS_Parrot_pcc_get_results __attribute__unused__ int _ASSERT_ARGS_CHECK = \
        PARROT_ASSERT_ARG(interp) \
     || PARROT_ASSERT_ARG(ctx)
+#define ASSERT_ARGS_Parrot_pcc_get_results_signature \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp) \
+    || PARROT_ASSERT_ARG(ctx)
 #define ASSERT_ARGS_Parrot_pcc_get_string_constant \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = \
        PARROT_ASSERT_ARG(interp) \
@@ -1018,6 +1034,10 @@
 #define ASSERT_ARGS_Parrot_pcc_set_results __attribute__unused__ int _ASSERT_ARGS_CHECK = \
        PARROT_ASSERT_ARG(interp) \
     || PARROT_ASSERT_ARG(ctx)
+#define ASSERT_ARGS_Parrot_pcc_set_results_signature \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp) \
+    || PARROT_ASSERT_ARG(ctx)
 #define ASSERT_ARGS_Parrot_pcc_set_sub __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 09:24:34 2009	(r40861)
+++ branches/context_pmc3/src/call/context.c	Sun Aug 30 09:53:47 2009	(r40862)
@@ -563,6 +563,45 @@
     c->current_results = pc;
 }
 
+/*
+
+=item C<PMC* Parrot_pcc_get_results_signature(PARROT_INTERP, PMC *ctx)>
+
+Set ptr into code with get_results opcode.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+PMC*
+Parrot_pcc_get_results_signature(PARROT_INTERP, ARGIN(PMC *ctx))
+{
+    ASSERT_ARGS(Parrot_pcc_get_results_signature)
+    Parrot_Context *c = Parrot_pcc_get_context(interp, ctx);
+    return c->results_signature;
+}
+
+
+/*
+
+=item C<void Parrot_pcc_set_results(PARROT_INTERP, PMC *ctx, opcode_t *pc)>
+
+Set ptr into code with get_results opcode.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+void
+Parrot_pcc_set_results_signature(PARROT_INTERP, ARGIN(PMC *ctx), ARGIN_NULLOK(PMC *sig))
+{
+    ASSERT_ARGS(Parrot_pcc_set_results_signature)
+    Parrot_Context *c = Parrot_pcc_get_context(interp, ctx);
+    c->results_signature = sig;
+}
+
 
 /*
 

Modified: branches/context_pmc3/src/call/pcc.c
==============================================================================
--- branches/context_pmc3/src/call/pcc.c	Sun Aug 30 09:24:34 2009	(r40861)
+++ branches/context_pmc3/src/call/pcc.c	Sun Aug 30 09:53:47 2009	(r40862)
@@ -528,10 +528,10 @@
 
     /* Non-constant signatures are stored in ctx->results_signature instead of
      * in the constants table. */
-    if (CONTEXT_FIELD(interp, ctx, results_signature))
+    if (Parrot_pcc_get_results_signature(interp, ctx))
         Parrot_init_arg_indexes_and_sig_pmc(interp, ctx,
                 Parrot_pcc_get_results(interp, ctx),
-                CONTEXT_FIELD(interp, ctx, results_signature), &st->dest);
+                Parrot_pcc_get_results_signature(interp, ctx), &st->dest);
     else
         Parrot_init_arg_op(interp, ctx, Parrot_pcc_get_results(interp, ctx), &st->dest);
 
@@ -1893,9 +1893,9 @@
     }
     else /* (param_or_result == PARROT_PASS_RESULTS) */ {
         src_signature               = interp->returns_signature;
-        dest_signature              = CONTEXT_FIELD(interp, dest_ctx, results_signature);
+        dest_signature              = Parrot_pcc_get_results_signature(interp, dest_ctx);
         interp->returns_signature   = NULL;
-        CONTEXT_FIELD(interp, dest_ctx, results_signature) = NULL;
+        Parrot_pcc_set_results_signature(interp, dest_ctx, NULL);
     }
 
     Parrot_init_arg_indexes_and_sig_pmc(interp, src_ctx, src_indexes,
@@ -2632,7 +2632,7 @@
     interp->current_args   = indexes[0];
     interp->args_signature = sigs[0];
     Parrot_pcc_set_results(interp, ctx, indexes[1]);
-    CONTEXT_FIELD(interp, ctx, results_signature) = sigs[1];
+    Parrot_pcc_set_results_signature(interp, ctx, sigs[1]);
     return ret_x;
 }
 
@@ -2867,7 +2867,7 @@
     interp->current_args   = arg_indexes;
     interp->args_signature = args_sig;
     Parrot_pcc_set_results(interp, ctx, result_indexes);
-    CONTEXT_FIELD(interp, ctx, results_signature) = results_sig;
+    Parrot_pcc_set_results_signature(interp, ctx, results_sig);
 
     /* arg_accessors assigned in loop above */
 

Modified: branches/context_pmc3/src/ops/core.ops
==============================================================================
--- branches/context_pmc3/src/ops/core.ops	Sun Aug 30 09:24:34 2009	(r40861)
+++ branches/context_pmc3/src/ops/core.ops	Sun Aug 30 09:53:47 2009	(r40862)
@@ -594,7 +594,7 @@
 
         parrot_pass_args(interp, ctx, caller_ctx, src_indexes, dest_indexes, PARROT_PASS_RESULTS);
     }
-    else if (CONTEXT_FIELD(interp, caller_ctx, results_signature)) {
+    else if (Parrot_pcc_get_results_signature(interp, caller_ctx)) {
     /* We have a dynamic result signature, from pcc_invoke */
         parrot_pass_args(interp, ctx, caller_ctx, interp->current_returns,
                 Parrot_pcc_get_results(interp, caller_ctx), PARROT_PASS_RESULTS);


More information about the parrot-commits mailing list