poke-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v2 2/3] pkl: Fix codegen of printf


From: Mohammad-Reza Nabipoor
Subject: [PATCH v2 2/3] pkl: Fix codegen of printf
Date: Tue, 8 Jun 2021 03:52:06 +0430

2021-06-06  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>

        * libpoke/pkl-gen.c (pkl_gen_pr_type_function): Add comment.
        (pkl_gen_pr_type_array): Save computed closure for printer in
        AST node.
        (pkl_gen_pr_type_struct): Likewise.
        * libpoke/pkl-gen.pks (print_boffset): Use escape sequence in string
        literal to make RAS happy.
        (struct_printer): s/struct_type/@struct_type/.
---
 ChangeLog           | 10 ++++++++++
 libpoke/pkl-gen.c   |  4 +++-
 libpoke/pkl-gen.pks |  8 +++-----
 3 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index febeb753..9ecfdcab 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2021-06-06  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
+
+       * libpoke/pkl-gen.c (pkl_gen_pr_type_function): Add comment.
+       (pkl_gen_pr_type_array): Save computed closure for printer in
+       AST node.
+       (pkl_gen_pr_type_struct): Likewise.
+       * libpoke/pkl-gen.pks (print_boffset): Use escape sequence in string
+       literal to make RAS happy.
+       (struct_printer): s/struct_type/@struct_type/.
+
 2021-06-06  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
 
        * libpoke/pvm.jitter (sprops): Add instruction for
diff --git a/libpoke/pkl-gen.c b/libpoke/pkl-gen.c
index 19d7fb9e..a57d4b58 100644
--- a/libpoke/pkl-gen.c
+++ b/libpoke/pkl-gen.c
@@ -2843,7 +2843,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_type_function)
     {
       /* Stack: VAL DEPTH  */
       pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP); /* DEPTH is not used.  */
-      pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP);
+      pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP); /* VAL is not used.  */
       pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
                     pvm_make_string ("#<closure>"));
       pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PRINTS);
@@ -3082,6 +3082,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_type_array)
           RAS_FUNCTION_ARRAY_PRINTER (printer_closure, array_type);
           pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, printer_closure);
           pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC);
+          PKL_AST_TYPE_A_PRINTER (array_type) = printer_closure;
         }
       else
         pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, printer_closure);
@@ -3482,6 +3483,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_type_struct)
           RAS_FUNCTION_STRUCT_PRINTER (printer_closure, struct_type);
           pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, printer_closure);
           pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PEC);
+          PKL_AST_TYPE_S_PRINTER (struct_type) = printer_closure;
         }
       else
         pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, printer_closure);
diff --git a/libpoke/pkl-gen.pks b/libpoke/pkl-gen.pks
index 1bd48fd1..eb0b60b8 100644
--- a/libpoke/pkl-gen.pks
+++ b/libpoke/pkl-gen.pks
@@ -1918,10 +1918,8 @@
         printlu 64              ; _
         push "integer"
         endsc
-        ;; XXX RAS turns "#b" into "(B_arg)"
-        push "#"
-        prints
-        push "b"
+        ;; RAS turns "#b" into "(B_arg)"; so we use '\x62' for 'b'.
+        push "#\x62"
         prints
         push "offset"
         endsc
@@ -2121,7 +2119,7 @@
         prints
  .c      uint64_t i;
         .let @field
- .c for (i = 0, @field = PKL_AST_TYPE_S_ELEMS (struct_type);
+ .c for (i = 0, @field = PKL_AST_TYPE_S_ELEMS (@struct_type);
  .c      @field;
  .c      @field = PKL_AST_CHAIN (@field))
  .c {
-- 
2.31.1




reply via email to

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