[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