[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[COMMITTED] pkl: gen: inroduce PKL_GEN_PUSH_SET_CONTEXT
From: |
Jose E. Marchesi |
Subject: |
[COMMITTED] pkl: gen: inroduce PKL_GEN_PUSH_SET_CONTEXT |
Date: |
Tue, 21 Dec 2021 12:45:43 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) |
It is very common to do a SET_CONTEXT after a PUSH_CONTEXT. This
patch introduces a new macro combining both.
2021-12-21 Jose E. Marchesi <jemarch@termi>
* libpoke/pkl-gen.c (PKL_GEN_PUSH_SET_CONTEXT): Define.
Use PKL_GEN_PUSH_SET_CONTEXT instead of pairs of PUSH_CONTEXT and
SET_CONTEXT.
* libpoke/pkl-gen.pks: Likewise.
---
ChangeLog | 7 ++
libpoke/pkl-gen.c | 242 +++++++++++++++++++++++++---------------------------
libpoke/pkl-gen.pks | 30 +++----
3 files changed, 135 insertions(+), 144 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index a7f4445e..a35a2a06 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
2021-12-21 Jose E. Marchesi <jemarch@termi>
+ * libpoke/pkl-gen.c (PKL_GEN_PUSH_SET_CONTEXT): Define.
+ Use PKL_GEN_PUSH_SET_CONTEXT instead of pairs of PUSH_CONTEXT and
+ SET_CONTEXT.
+ * libpoke/pkl-gen.pks: Likewise.
+
+2021-12-21 Jose E. Marchesi <jemarch@termi>,
+
* libpoke/pkl-gen.c (pkl_gen_pr_decl): Use PKL_GEN_PUSH_CONTEXT
instead of PKL_GEN_DUP_CONTEXT.
(LMAP): Likewise.
diff --git a/libpoke/pkl-gen.c b/libpoke/pkl-gen.c
index c5b2ab94..8b6278c1 100644
--- a/libpoke/pkl-gen.c
+++ b/libpoke/pkl-gen.c
@@ -97,6 +97,13 @@
} \
while (0)
+#define PKL_GEN_PUSH_SET_CONTEXT(CTX) \
+ do \
+ { \
+ PKL_GEN_PUSH_CONTEXT; \
+ PKL_GEN_SET_CONTEXT (CTX); \
+ } \
+ while (0)
/* Code generated by RAS is used in the handlers below. Configure it
to use the main assembler in the GEN payload. Then just include
@@ -200,12 +207,13 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_decl)
if (PKL_AST_TYPE_S_WRITER (type_struct) == PVM_NULL)
{
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
- RAS_FUNCTION_STRUCT_WRITER (writer_closure, type_struct);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, writer_closure); /*
CLS */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC); /*
CLS */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP); /*
_ */
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
+ {
+ RAS_FUNCTION_STRUCT_WRITER (writer_closure, type_struct);
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, writer_closure);
/* CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC);
/* CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP);
/* _ */
+ }
PKL_GEN_POP_CONTEXT;
PKL_AST_TYPE_S_WRITER (type_struct) = writer_closure;
@@ -213,14 +221,13 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_decl)
if (PKL_AST_TYPE_S_MAPPER (type_struct) == PVM_NULL)
{
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_MAPPER);
-
- RAS_FUNCTION_STRUCT_MAPPER (mapper_closure, type_struct);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, mapper_closure); /*
CLS */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC); /*
CLS */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP); /*
_ */
-
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_MAPPER);
+ {
+ RAS_FUNCTION_STRUCT_MAPPER (mapper_closure, type_struct);
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, mapper_closure);
/* CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC);
/* CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP);
/* _ */
+ }
PKL_GEN_POP_CONTEXT;
PKL_AST_TYPE_S_MAPPER (type_struct) = mapper_closure;
@@ -228,13 +235,14 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_decl)
if (PKL_AST_TYPE_S_CONSTRUCTOR (type_struct) == PVM_NULL)
{
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_CONSTRUCTOR);
- RAS_FUNCTION_STRUCT_CONSTRUCTOR (constructor_closure,
- type_struct); /* CLS
*/
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
constructor_closure); /* CLS */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC);
/* CLS */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP);
/* _ */
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_CONSTRUCTOR);
+ {
+ RAS_FUNCTION_STRUCT_CONSTRUCTOR (constructor_closure,
+ type_struct); /*
CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
constructor_closure); /* CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC);
/* CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP);
/* _ */
+ }
PKL_GEN_POP_CONTEXT;
PKL_AST_TYPE_S_CONSTRUCTOR (type_struct) = constructor_closure;
@@ -242,13 +250,14 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_decl)
if (PKL_AST_TYPE_S_COMPARATOR (type_struct) == PVM_NULL)
{
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_COMPARATOR);
- RAS_FUNCTION_STRUCT_COMPARATOR (comparator_closure,
- type_struct); /* CLS
*/
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, comparator_closure);
/* CLS */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC);
/* CLS */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP);
/* _ */
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_COMPARATOR);
+ {
+ RAS_FUNCTION_STRUCT_COMPARATOR (comparator_closure,
+ type_struct); /*
CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
comparator_closure); /* CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC);
/* CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP);
/* _ */
+ }
PKL_GEN_POP_CONTEXT;
PKL_AST_TYPE_S_COMPARATOR (type_struct) = comparator_closure;
@@ -261,13 +270,14 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_decl)
integrators, since integrators do not call writers
nor the other way around. This eases sharing of
code in the pks. */
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
- RAS_FUNCTION_STRUCT_INTEGRATOR (integrator_closure,
- type_struct); /* CLS
*/
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, integrator_closure);
/* CLS */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC);
/* CLS */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP);
/* _ */
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
+ {
+ RAS_FUNCTION_STRUCT_INTEGRATOR (integrator_closure,
+ type_struct); /*
CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
integrator_closure); /* CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC);
/* CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP);
/* _ */
+ }
PKL_GEN_POP_CONTEXT;
PKL_AST_TYPE_S_INTEGRATOR (type_struct) = integrator_closure;
@@ -297,20 +307,20 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_decl)
lexical context! This makes the calls to
in_array_bounder in array mappers/constructors to
only happen for anonymous array types. */
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_ARRAY_BOUNDER);
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_ARRAY_BOUNDER);
PKL_PASS_SUBPASS (array_type);
PKL_GEN_POP_CONTEXT;
}
if (PKL_AST_TYPE_A_WRITER (array_type) == PVM_NULL)
{
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
- RAS_FUNCTION_ARRAY_WRITER (writer_closure, array_type);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, writer_closure); /*
CLS */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC); /*
CLS */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP); /*
_ */
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
+ {
+ RAS_FUNCTION_ARRAY_WRITER (writer_closure, array_type);
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, writer_closure);
/* CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC);
/* CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP);
/* _ */
+ }
PKL_GEN_POP_CONTEXT;
PKL_AST_TYPE_A_WRITER (array_type) = writer_closure;
@@ -318,13 +328,13 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_decl)
if (PKL_AST_TYPE_A_MAPPER (array_type) == PVM_NULL)
{
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_MAPPER);
-
- RAS_FUNCTION_ARRAY_MAPPER (mapper_closure, array_type);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, mapper_closure); /*
CLS */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC); /*
CLS */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP); /*
_ */
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_MAPPER);
+ {
+ RAS_FUNCTION_ARRAY_MAPPER (mapper_closure, array_type);
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, mapper_closure);
/* CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC);
/* CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP);
/* _ */
+ }
PKL_GEN_POP_CONTEXT;
PKL_AST_TYPE_A_MAPPER (array_type) = mapper_closure;
@@ -332,13 +342,14 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_decl)
if (PKL_AST_TYPE_A_CONSTRUCTOR (array_type) == PVM_NULL)
{
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_CONSTRUCTOR);
- RAS_FUNCTION_ARRAY_CONSTRUCTOR (constructor_closure,
- array_type); /* CLS
*/
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
constructor_closure); /* CLS */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC);
/* CLS */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP);
/* _ */
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_CONSTRUCTOR);
+ {
+ RAS_FUNCTION_ARRAY_CONSTRUCTOR (constructor_closure,
+ array_type); /*
CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
constructor_closure); /* CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC);
/* CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP);
/* _ */
+ }
PKL_GEN_POP_CONTEXT;
PKL_AST_TYPE_A_CONSTRUCTOR (array_type) = constructor_closure;
@@ -909,15 +920,16 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_ass_stmt)
if (writer == PVM_NULL \
|| !PKL_AST_TYPE_NAME ((TYPE))) \
{ \
- PKL_GEN_PUSH_CONTEXT; \
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER); \
- if (lvalue_type_code == PKL_TYPE_ARRAY) \
- RAS_FUNCTION_ARRAY_WRITER (writer, (TYPE)); \
- else \
- RAS_FUNCTION_STRUCT_WRITER (writer, (TYPE)); \
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, writer); /* CLS */ \
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC); /* CLS */ \
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP); /* _ */ \
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER); \
+ { \
+ if (lvalue_type_code == PKL_TYPE_ARRAY) \
+ RAS_FUNCTION_ARRAY_WRITER (writer, (TYPE)); \
+ else \
+ RAS_FUNCTION_STRUCT_WRITER (writer, (TYPE)); \
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, writer); /* CLS */ \
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC); /* CLS */ \
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP); /* _ */ \
+ } \
PKL_GEN_POP_CONTEXT; \
\
if (lvalue_type_code == PKL_TYPE_ARRAY) \
@@ -938,8 +950,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_ass_stmt)
\
pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_ROT); /* IOS BOFF VAL */ \
\
- PKL_GEN_PUSH_CONTEXT; \
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER); \
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER); \
PKL_PASS_SUBPASS ((TYPE)); \
PKL_GEN_POP_CONTEXT; \
break; \
@@ -955,8 +966,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_ass_stmt)
PKL_PASS_SUBPASS (exp);
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_LVALUE);
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_LVALUE);
PKL_PASS_SUBPASS (lvalue);
PKL_GEN_POP_CONTEXT;
@@ -1548,8 +1558,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_format)
/* Format the value. */
pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
pvm_make_int (0, 32)); /* OMODE ODEPTH EXP DEPTH */
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_FORMATER);
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_FORMATER);
PKL_PASS_SUBPASS (exp_type); /* OMODE ODEPTH STR */
PKL_GEN_POP_CONTEXT;
@@ -1687,8 +1696,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_print_stmt)
/* Print out the value. */
pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
pvm_make_int (0, 32)); /* OMODE ODEPTH EXP
DEPTH */
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_PRINTER);
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_PRINTER);
PKL_PASS_SUBPASS (exp_type);
PKL_GEN_POP_CONTEXT;
@@ -1890,8 +1898,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_funcall)
}
/* Push the closure for FUNCTION and call the bloody function. */
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_FUNCALL);
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_FUNCALL);
PKL_PASS_SUBPASS (PKL_AST_FUNCALL_FUNCTION (funcall));
PKL_GEN_POP_CONTEXT;
pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_CALL);
@@ -1945,8 +1952,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_func)
if (PKL_AST_TYPE_CODE (rtype) == PKL_TYPE_ARRAY
&& PKL_AST_TYPE_A_BOUNDER (rtype) == PVM_NULL)
{
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_ARRAY_BOUNDER);
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_ARRAY_BOUNDER);
PKL_PASS_SUBPASS (rtype);
PKL_GEN_POP_CONTEXT;
}
@@ -2013,8 +2019,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_func_arg)
if (PKL_AST_TYPE_A_BOUNDER (func_arg_type) == PVM_NULL)
{
bounder_created_p = 1;
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_ARRAY_BOUNDER);
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_ARRAY_BOUNDER);
PKL_PASS_SUBPASS (func_arg_type);
PKL_GEN_POP_CONTEXT;
}
@@ -2212,8 +2217,7 @@ PKL_PHASE_END_HANDLER
PKL_PHASE_BEGIN_HANDLER (pkl_gen_ps_isa)
{
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_TYPE);
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_TYPE);
PKL_PASS_SUBPASS (PKL_AST_ISA_TYPE (PKL_PASS_NODE));
PKL_GEN_POP_CONTEXT;
@@ -2253,8 +2257,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_cast)
{
pvm_program_label label = pkl_asm_fresh_label (PKL_GEN_ASM);
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_TYPE);
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_TYPE);
PKL_PASS_SUBPASS (to_type);
PKL_GEN_POP_CONTEXT;
@@ -2300,8 +2303,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_cast)
if (PKL_AST_TYPE_A_BOUNDER (to_type) == PVM_NULL)
{
bounder_created_p = 1;
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_ARRAY_BOUNDER);
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_ARRAY_BOUNDER);
PKL_PASS_SUBPASS (to_type);
PKL_GEN_POP_CONTEXT;
}
@@ -2339,8 +2341,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_cast)
pvm_val integrator_closure;
/* See note about in_writer in pkl_gen_pr_decl. */
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
RAS_FUNCTION_STRUCT_INTEGRATOR (integrator_closure,
from_type); /* CLS */
@@ -2383,8 +2384,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_ps_cons)
/* Build an array with default values. Note how array
constructors do not use their argument. */
pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, PVM_NULL);
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_CONSTRUCTOR);
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_CONSTRUCTOR);
PKL_PASS_SUBPASS (cons_type);
PKL_GEN_POP_CONTEXT;
@@ -2398,8 +2398,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_ps_cons)
}
break;
case PKL_AST_CONS_KIND_STRUCT:
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_CONSTRUCTOR);
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_CONSTRUCTOR);
PKL_PASS_SUBPASS (cons_type);
PKL_GEN_POP_CONTEXT;
break;
@@ -2485,8 +2484,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_map)
pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_NIP);
}
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_MAPPER);
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_MAPPER);
PKL_PASS_SUBPASS (map_type);
PKL_GEN_POP_CONTEXT;
}
@@ -2536,8 +2534,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_array)
/* Create a new empty array of the right type, having the right
number of elements. */
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_TYPE);
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_TYPE);
PKL_PASS_SUBPASS (array_type); /* TYP */
PKL_GEN_POP_CONTEXT;
@@ -2547,10 +2544,11 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_array)
pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_MKA); /* ARR */
/* Install a writer in the array. */
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
- RAS_FUNCTION_ARRAY_WRITER (array_type_writer, array_type);
- PKL_AST_TYPE_A_WRITER (array_type) = array_type_writer;
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
+ {
+ RAS_FUNCTION_ARRAY_WRITER (array_type_writer, array_type);
+ PKL_AST_TYPE_A_WRITER (array_type) = array_type_writer;
+ }
PKL_GEN_POP_CONTEXT;
pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, array_type_writer); /* CLS */
pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC); /* CLS */
@@ -2711,8 +2709,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_ps_struct)
pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
pvm_make_ulong (PKL_AST_STRUCT_NELEM (sct), 64));
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_TYPE);
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_TYPE);
PKL_PASS_SUBPASS (sct_type); /* TYP */
PKL_GEN_POP_CONTEXT;
@@ -2997,8 +2994,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_type_function)
/* Constructor argument. */
pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, PVM_NULL);
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_CONSTRUCTOR);
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_CONSTRUCTOR);
PKL_PASS_SUBPASS (function_rtype);
PKL_GEN_POP_CONTEXT;
}
@@ -3147,8 +3143,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_type_array)
pkl_gen_pr_decl. */
bounder_created = 1;
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_ARRAY_BOUNDER);
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_ARRAY_BOUNDER);
PKL_PASS_SUBPASS (array_type);
PKL_GEN_POP_CONTEXT;
}
@@ -3243,8 +3238,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_type_array)
pvm_val writer_closure;
/* Compile a writer function to a closure. */
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
RAS_FUNCTION_ARRAY_WRITER (writer_closure, array_type);
PKL_GEN_POP_CONTEXT;
@@ -3331,8 +3325,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_type_array)
Named array types have their bounder compiled in
pkl_gen_pr_decl. */
bounder_created = 1;
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_ARRAY_BOUNDER);
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_ARRAY_BOUNDER);
PKL_PASS_SUBPASS (array_type);
PKL_GEN_POP_CONTEXT;
}
@@ -3385,12 +3378,13 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_type_array)
map-assignment operation. */
if (array_type_writer == PVM_NULL)
{
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
- RAS_FUNCTION_ARRAY_WRITER (array_type_writer, array_type);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, array_type_writer); /* CLS
*/
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC); /* CLS
*/
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP); /* _ */
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
+ {
+ RAS_FUNCTION_ARRAY_WRITER (array_type_writer, array_type);
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, array_type_writer); /*
CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC); /*
CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP); /* _
*/
+ }
PKL_GEN_POP_CONTEXT;
PKL_AST_TYPE_A_WRITER (array_type) = array_type_writer;
@@ -3573,8 +3567,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_type_struct)
current environment. */
pvm_val writer_closure;
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
RAS_FUNCTION_STRUCT_WRITER (writer_closure, type_struct);
PKL_GEN_POP_CONTEXT;
@@ -3646,12 +3639,13 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_type_struct)
/* The struct type is anonymous and doesn't have a writer.
Compile one in this environment. */
- PKL_GEN_PUSH_CONTEXT;
- PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
- RAS_FUNCTION_STRUCT_WRITER (type_struct_writer, type_struct);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, type_struct_writer); /*
CLS */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC); /*
CLS */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP); /* _
*/
+ PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
+ {
+ RAS_FUNCTION_STRUCT_WRITER (type_struct_writer, type_struct);
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, type_struct_writer); /*
CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC); /*
CLS */
+ pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP); /*
_ */
+ }
PKL_GEN_POP_CONTEXT;
PKL_AST_TYPE_S_WRITER (type_struct) = type_struct_writer;
diff --git a/libpoke/pkl-gen.pks b/libpoke/pkl-gen.pks
index 25a8062b..d0317d0f 100644
--- a/libpoke/pkl-gen.pks
+++ b/libpoke/pkl-gen.pks
@@ -77,8 +77,7 @@
;; both bounded and unbounded array types. Also, this avoids
;; evaluating the boundary expression in the array type
;; twice.
- .c PKL_GEN_PUSH_CONTEXT;
- .c PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_TYPE);
+ .c PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_TYPE);
.c PKL_PASS_SUBPASS (PKL_AST_TYPE_A_ETYPE (@array_type));
.c PKL_GEN_POP_CONTEXT;
; ETYPE
@@ -280,8 +279,7 @@
swap ; EBOFF VAL
pushvar $ios ; EBOFF VAL IOS
nrot ; IOS EOFF VAL
- .c PKL_GEN_PUSH_CONTEXT;
- .c PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
+ .c PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
.c PKL_PASS_SUBPASS (PKL_AST_TYPE_A_ETYPE (@array_type));
.c PKL_GEN_POP_CONTEXT;
; _
@@ -366,8 +364,7 @@
regvar $eidx ; BOFF
regvar $eboff ; _
;; Build the type of the constructed array.
- .c PKL_GEN_PUSH_CONTEXT;
- .c PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_TYPE);
+ .c PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_TYPE);
.c PKL_PASS_SUBPASS (@array_type);
.c PKL_GEN_POP_CONTEXT;
; ATYPE
@@ -993,8 +990,7 @@
;; Push the number of fields
pushvar $nfield ; BOFF [EBOFF STR VAL]... NFIELD
;; Finally, push the struct type and call mksct.
- .c PKL_GEN_PUSH_CONTEXT;
- .c PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_TYPE);
+ .c PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_TYPE);
.c PKL_PASS_SUBPASS (@type_struct);
.c PKL_GEN_POP_CONTEXT;
; BOFF [EBOFF STR VAL]... NFIELD TYP
@@ -1279,8 +1275,7 @@
.c if (PKL_AST_TYPE_A_BOUNDER (@field_type) == PVM_NULL)
.c {
.c bounder_created_p = 1;
- .c PKL_GEN_PUSH_CONTEXT;
- .c PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_ARRAY_BOUNDER);
+ .c PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_ARRAY_BOUNDER);
.c PKL_PASS_SUBPASS (@field_type);
.c PKL_GEN_POP_CONTEXT;
.c }
@@ -1438,8 +1433,7 @@
.c }
;; Push the number of fields, create the struct and return it.
pushvar $nfield ; null [OFF STR VAL]... NMETHOD NFIELD
- .c PKL_GEN_PUSH_CONTEXT;
- .c PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_TYPE);
+ .c PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_TYPE);
.c PKL_PASS_SUBPASS (@type_struct);
.c PKL_GEN_POP_CONTEXT;
; null [OFF STR VAL]... NMETHOD NFIELD TYP
@@ -1560,8 +1554,7 @@
swap ; IOS EOFF EVAL
.c { int endian = PKL_AST_STRUCT_TYPE_FIELD_ENDIAN (@field);
.c PKL_GEN_PAYLOAD->endian = PKL_AST_STRUCT_TYPE_FIELD_ENDIAN (@field);
- .c PKL_GEN_PUSH_CONTEXT;
- .c PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
+ .c PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
.c PKL_PASS_SUBPASS (PKL_AST_STRUCT_TYPE_FIELD_TYPE (@field));
.c PKL_GEN_POP_CONTEXT;
.c PKL_GEN_PAYLOAD->endian = endian;
@@ -1597,8 +1590,7 @@
.c {
;; Note that the constructor consumes the null
;; on the stack.
- .c PKL_GEN_PUSH_CONTEXT;
- .c PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_CONSTRUCTOR);
+ .c PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_CONSTRUCTOR);
.c PKL_PASS_SUBPASS (@struct_itype);
.c PKL_GEN_POP_CONTEXT;
.c }
@@ -1679,8 +1671,7 @@
push null
;; Note that the constructor consumes the null
;; on the stack.
- .c PKL_GEN_PUSH_CONTEXT;
- .c PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_CONSTRUCTOR);
+ .c PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_CONSTRUCTOR);
.c PKL_PASS_SUBPASS (@struct_itype);
.c PKL_GEN_POP_CONTEXT;
regvar $ivalue
@@ -1748,8 +1739,7 @@
;; that case.
push PVM_E_GENERIC
pushe .write_failed
- .c PKL_GEN_PUSH_CONTEXT;
- .c PKL_GEN_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
+ .c PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_WRITER);
.c PKL_PASS_SUBPASS (@type);
.c PKL_GEN_POP_CONTEXT;
pope
--
2.11.0
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [COMMITTED] pkl: gen: inroduce PKL_GEN_PUSH_SET_CONTEXT,
Jose E. Marchesi <=