poke-devel
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]