Ticket #596: context.c

File context.c, 3.6 KB (added by whiteknight, 5 years ago)

an example file for how a new Context abstraction API could look. Does not build and is not pretty

Line 
1PMC *
2Parrot_ctx_current_lexpad(PARROT_INTERP, ARGIN(PMC *p))
3{
4    ASSERT_ARGS(Parrot_ctx_current_lexpad)
5    if (!PMC_IS_NULL(p))
6        CONTEXT(interp)->lex_pad = p;
7    return CONTEXT(interp)->lex_pad;
8}
9
10PMC *
11Parrot_ctx_current_sub_pmc(PARROT_INTERP, ARGIN(PMC *sub))
12{
13    ASSERT_ARGS(Parrot_ctx_current_sub_pmc)
14    if(!PMC_IS_NULL(sub))
15        CONTEXT(interp)->current_sub = sub;
16    return CONTEXT(interp)->current_sub;
17}
18
19PMC *
20Parrot_ctx_current_handlers(PARROT_INTERP, ARGIN(PMC *handlers))
21{
22    ASSERT_ARGS(Parrot_ctx_current_handlers)
23    if (!PMC_IS_NULL(handlers))
24        CONTEXT(interp)->handlers = handlers;
25    return CONTEXT(interp)->handlers;
26}
27
28PMC *
29Parrot_ctx_current_continuation(PARROT_INTERP, ARGIN(PMC* current_cont))
30{
31    ASSERT_ARGS(Parrot_ctx_current_continuation)
32    if (!PMC_IS_NULL(current_cont))
33        CONTEXT(interp)->current_cont = current_cont;
34    return CONTEXT(interp)->current_cont;
35}
36
37PMC *
38Parrot_ctx_current_object(PARROT_INTERP, ARGIN(PMC *p))
39{
40    ASSERT_ARGS(Parrot_ctx_current_object)
41    if (!PMC_IS_NULL(p))
42        CONTEXT(interp)->current_object = p;
43    return CONTEXT(interp)->current_object;
44}
45
46PMC *
47Parrot_ctx_current_namespace(PARROT_INTERP, ARGIN(PMC *p))
48{
49    ASSERT_ARGS(Parrot_ctx_current_namespace)
50    if (!PMC_IS_NULL(p))
51        CONTEXT(interp)->current_namespace = p;
52    return CONTEXT(interp)->current_namespace;
53}
54
55PMC *
56Parrot_ctx_current_results_signature(PARROT_INTERP, ARGIN(PMC *p))
57{
58    ASSERT_ARGS(Parrot_ctx_results_signature)
59    if (!PMC_IS_NULL(p))
60        CONTEXT(interp)->results_signature = p;
61    return CONTEXT(interp)->results_signature;
62}
63
64Parrot_Context *
65Parrot_ctx_caller_ctx(PARROT_INTERP, ARGMOD(Parrot_Context *ctx),
66    ARGIN(Parrot_Context *caller))
67{
68    ASSERT_ARGS(Parrot_ctx_caller_ctx)
69    if (caller != NULL)
70        ctx->caller_ctx = caller
71    return ctx->caller_ctx;
72}
73
74Parrot_Context *
75Parrot_ctx_outer_ctx(PARROT_INTERP, ARGMOD(Parrot_Context *ctx),
76    ARGIN(Parrot_Context *outer))
77{
78    ASSERT_ARGS(Parrot_ctx_outer_ctx)
79    if (outer != NULL)
80        ctx->outer_ctx = outer;
81    return ctx->outer_ctx;
82}
83
84PackFile_Constant *
85Parrot_ctx_get_constant(PARROT_INTERP, size_t idx)
86{
87    return ctx->constants[idx];
88}
89
90
91INTVAL
92Parrot_ctx_get_INTVAL_reg(PARROT_INTERP, ARGIN(Parrot_Context *ctx),
93    INTVAL idx)
94{
95    ASSERT_ARGS(Parrot_ctx_get_INTVAL_reg)
96    return ctx->bp.regs_i[idx];
97}
98
99void
100Parrot_ctx_set_INTVAL_reg(PARROT_INTERP, ARGIN(Parrot_Context *ctx),
101    INTVAL idx, INTVAL value)
102{
103    ASSERT_ARGS(Parrot_ctx_set_INTVAL_reg)
104    ctx->bp.regs_i[idx] = value;
105}
106
107FLOATVAL
108Parrot_ctx_get_FLOATVAL_reg(PARROT_INTERP, ARGIN(Parrot_Context *ctx),
109    INTVAL idx)
110{
111    ASSERT_ARGS(Parrot_ctx_get_FLOATVAL_reg)
112    return ctx->bp.regs_n[-1L - idx];
113}
114
115void
116Parrot_ctx_set_FLOATVAL_reg(PARROT_INTERP, ARGIN(Parrot_Context *ctx),
117    INTVAL idx, FLOATVAL value)
118{
119    ASSERT_ARGS(Parrot_ctx_set_FLOATVAL_reg)
120    ctx->bp.regs_n[-1L - idx] = value;
121}
122
123
124STRING *
125Parrot_ctx_get_STRING_reg(PARROT_INTERP, ARGIN(Parrot_Context *ctx),
126    INTVAL idx)
127{
128    ASSERT_ARGS(Parrot_ctx_get_FLOATVAL_reg)
129    return ctx->bp.regs_s[idx[;
130}
131
132void
133Parrot_ctx_set_STRING_reg(PARROT_INTERP, ARGIN(Parrot_Context *ctx),
134    INTVAL idx, ARGIN(STRING *value))
135{
136    ASSERT_ARGS(Parrot_ctx_set_FLOATVAL_reg)
137    ctx->bp.regs_s[idx] = value;
138}
139
140PMC *
141Parrot_ctx_get_PMC_reg(PARROT_INTERP, ARGIN(Parrot_Context *ctx), INTVAL idx)
142{
143    ASSERT_ARGS(Parrot_ctx_get_FLOATVAL_reg)
144    return ctx->bp.regs_p[-1L - idx];
145}
146
147void
148Parrot_ctx_set_PMC_reg(PARROT_INTERP, ARGIN(Parrot_Context *ctx),
149    INTVAL idx, ARGIN(PMC *value))
150{
151    ASSERT_ARGS(Parrot_ctx_set_FLOATVAL_reg)
152    ctx->bp.regs_p[-1L - idx] = value;
153}