[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] pkl: Add special cases for "\t\n\\\"" chars in formater/prin
From: |
Jose E. Marchesi |
Subject: |
Re: [PATCH] pkl: Add special cases for "\t\n\\\"" chars in formater/printer |
Date: |
Thu, 02 Dec 2021 16:54:26 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) |
Hi Mohammad.
> 2021-12-02 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
>
> * libpoke/pkl-rt-1.pk (_pkl_escape_string): Add special cases for
> tab (\t), new-line ('\n'), double-quote ('"') and backslash ('\\').
> * testsuite/poke.pkl/format-30.pk: New test.
> * testsuite/poke.pkl/format-31.pk: Likewise.
> * testsuite/poke.pkl/format-32.pk: Likewise.
> * testsuite/poke.pkl/format-33.pk: Likewise.
> * testsuite/poke.pkl/format-34.pk: Likewise.
> * testsuite/poke.pkl/format-35.pk: Likewise.
> ---
> ChangeLog | 11 +++++++++++
> libpoke/pkl-rt-1.pk | 27 +++++++++++++++++++++++++--
> testsuite/Makefile.am | 6 ++++++
> 3 files changed, 42 insertions(+), 2 deletions(-)
This is OK for master.
Thanks.
> diff --git a/ChangeLog b/ChangeLog
> index 05fa68a8..7e9172f4 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,14 @@
> +2021-12-02 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
> +
> + * libpoke/pkl-rt-1.pk (_pkl_escape_string): Add special cases for
> + tab (\t), new-line ('\n'), double-quote ('"') and backslash ('\\').
> + * testsuite/poke.pkl/format-30.pk: New test.
> + * testsuite/poke.pkl/format-31.pk: Likewise.
> + * testsuite/poke.pkl/format-32.pk: Likewise.
> + * testsuite/poke.pkl/format-33.pk: Likewise.
> + * testsuite/poke.pkl/format-34.pk: Likewise.
> + * testsuite/poke.pkl/format-35.pk: Likewise.
> +
> 2021-12-02 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
>
> * libpoke/pvm.jitter (strace): Re-implement using
> diff --git a/libpoke/pkl-rt-1.pk b/libpoke/pkl-rt-1.pk
> index 6dd8f34d..dcf90307 100644
> --- a/libpoke/pkl-rt-1.pk
> +++ b/libpoke/pkl-rt-1.pk
> @@ -310,13 +310,36 @@ fun _pkl_escape_string = (string str) string:
>
> /* Calculate the length of escaped string. */
> for (var i = 0UL; i < len; ++i)
> - len_esc += str[i] - 0x20UB < 0x5fUB /* is printable */ ? 1 : 4 /* \xXX
> */;
> + len_esc +=
> + str[i] == '\t' || str[i] == '\n' || str[i] == '"' || str[i] == '\\'
> ? 2
> + : str[i] - 0x20UB < 0x5fUB /* is printable */ ? 1
> + : 4 /* \xXX */;
>
> var esc = "?" * len_esc;
>
> for (var i = 0UL, j = 0UL; i < len; ++i)
> {
> - if (str[i] - 0x20UB < 0x5fUB)
> + if (str[i] == '\t')
> + {
> + __pkl_unsafe_string_set (esc, j, "\\t");
> + j += 2;
> + }
> + else if (str[i] == '\n')
> + {
> + __pkl_unsafe_string_set (esc, j, "\\n");
> + j += 2;
> + }
> + else if (str[i] == '"')
> + {
> + __pkl_unsafe_string_set (esc, j, "\\\"");
> + j += 2;
> + }
> + else if (str[i] == '\\')
> + {
> + __pkl_unsafe_string_set (esc, j, "\\\\");
> + j += 2;
> + }
> + else if (str[i] - 0x20UB < 0x5fUB)
> {
> __pkl_unsafe_string_set (esc, j, str[i] as string);
> ++j;
> diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am
> index bffe6ab0..4a890233 100644
> --- a/testsuite/Makefile.am
> +++ b/testsuite/Makefile.am
> @@ -1058,6 +1058,12 @@ EXTRA_DIST = \
> poke.pkl/format-27.pk \
> poke.pkl/format-28.pk \
> poke.pkl/format-29.pk \
> + poke.pkl/format-30.pk \
> + poke.pkl/format-31.pk \
> + poke.pkl/format-32.pk \
> + poke.pkl/format-33.pk \
> + poke.pkl/format-34.pk \
> + poke.pkl/format-35.pk \
> poke.pkl/format-diag-1.pk \
> poke.pkl/formfeedchar.pk \
> poke.pkl/fun-types-1.pk \