[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] pkl: Get rid of string literals as exception names
From: |
Jose E. Marchesi |
Subject: |
Re: [PATCH] pkl: Get rid of string literals as exception names |
Date: |
Thu, 27 Jan 2022 10:33:06 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) |
Hi Mohammad.
> 2022-01-27 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
>
> * libpoke/pvm.h (PVM_EXCEPTIONS): New macro.
> * libpoke/pvm.jitter (wrapped-globals): Add `pvm_exception_names`.
> (PVM_RAISE_DFL): Use `pvm_exception_names` instead of string
> literals.
> (late-c): Define `pvm_exception_names`.
> ---
>
> Hello, Jose.
>
> With this patch, I declare ARMv7 as a "supported" platform :)
Related to this: I see these comments that Luca left when he first
turned Jitter in poke to use non-threaded mode:
# XXX make non-relocatable: see raise
Luca, was it because of these string constants, or because the raising
of the exceptions? If the first, we can remove the comments once this
patch gets applied.
>
> === poke Summary ===
>
> # of expected passes 6258
> # of unsupported tests 7
>
>
> Regards,
> Mohammad-Reza
>
>
> etc/pvm-wraps-static-whitelist | 1 +
> libpoke/pvm.h | 21 +++++++++++++++++++++
> libpoke/pvm.jitter | 9 ++++++++-
> 3 files changed, 30 insertions(+), 1 deletion(-)
>
> diff --git a/etc/pvm-wraps-static-whitelist b/etc/pvm-wraps-static-whitelist
> index 8886c0a9..5f08f93e 100644
> --- a/etc/pvm-wraps-static-whitelist
> +++ b/etc/pvm-wraps-static-whitelist
> @@ -12,6 +12,7 @@ pvm_literal_invalid_class
> pvm_literal_eindex
> pvm_literal_notmappable
> pvm_literal_newline
> +pvm_exception_names
> pvm_memcpy
> pvm_strlen
> pvm_strcpy
> diff --git a/libpoke/pvm.h b/libpoke/pvm.h
> index 4baee433..0980675e 100644
> --- a/libpoke/pvm.h
> +++ b/libpoke/pvm.h
> @@ -491,6 +491,27 @@ enum pvm_exit_code
> /* Exceptions. These should be in sync with the exception code macros
> in libpoke.h, and variables and exception names, declared in pkl-rt.pk */
>
> +#define PVM_EXCEPTIONS(E) \
> + E(GENERIC) \
> + E(DIV_BY_ZERO) \
> + E(NO_IOS) \
> + E(NO_RETURN) \
> + E(OUT_OF_BOUNDS) \
> + E(MAP_BOUNDS) \
> + E(EOF) \
> + E(MAP) \
> + E(CONV) \
> + E(ELEM) \
> + E(CONSTRAINT) \
> + E(IO) \
> + E(SIGNAL) \
> + E(IOFLAGS) \
> + E(INVAL) \
> + E(EXIT) \
> + E(ASSERT) \
> + E(OVERFLOW) \
> + E(PERM)
> +
> #define PVM_E_GENERIC 0
> #define PVM_E_GENERIC_NAME "generic"
> #define PVM_E_GENERIC_ESTATUS 1
> diff --git a/libpoke/pvm.jitter b/libpoke/pvm.jitter
> index 0cb1cf7d..8d95a155 100644
> --- a/libpoke/pvm.jitter
> +++ b/libpoke/pvm.jitter
> @@ -163,6 +163,7 @@ wrapped-globals
> pvm_literal_notmappable
> pvm_literal_newline
> libpoke_term_if
> + pvm_exception_names
> end
>
>
> @@ -288,7 +289,7 @@ late-header-c
> #define PVM_RAISE_DFL(BASE) \
> do \
> { \
> - PVM_RAISE (BASE,BASE##_NAME,BASE##_ESTATUS); \
> + PVM_RAISE (BASE,pvm_exception_names[BASE],BASE##_ESTATUS); \
> } while (0)
>
> /* Macros to implement different kind of instructions. These are to
> @@ -909,6 +910,12 @@ late-c
> static const char *pvm_literal_notmappable = "not mappable value";
> static const char *pvm_literal_newline = "\n";
>
> +#define E(key) [PVM_E_##key] = PVM_E_##key##_NAME,
> + static const char *pvm_exception_names[] = {
> + PVM_EXCEPTIONS(E)
> + };
> +#undef E
> +
> static int
> pvm_nanosleep (const struct timespec *rqtp, struct timespec *rmtp)
> {
I think the table of exception names should be in pvm.h, not in
pvm.jitter. And it would be better to define it in a portable way,
without array initializers:
const char *pvm_exception_names[] =
{
PVM_E_GENERIC_NAME,
...
};
After the release I will put all the C side of the exception information
in a pkl-exception.def file. But for now the above will suffice.
Thanks!