poke-devel
[Top][All Lists]
Advanced

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

Re: [PATCH 1/2] pkl: fix array-to-array casting to have the right bounde


From: Jose E. Marchesi
Subject: Re: [PATCH 1/2] pkl: fix array-to-array casting to have the right bounder
Date: Sat, 18 Feb 2023 18:42:25 +0100
User-agent: Gnus/5.13 (Gnus v5.13)

Hi Mohammad.
OK for both master and maint/poke-3.

> Bounders in PVM arrays are closures that return one of these PVM
> values: `PVM_NULL', an integer, an offset.
> This commit fixes the cast operation to an unbounded array type.
>
> 2023-02-18  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
>
>       * libpoke/pkl-asm.c (pkl_asm_insn_atoa): Do not use `PVM_NULL' as
>       the bounder in the type of array.  Use a closure that returns
>       `PVM_NULL'.
>       * testsuite/poke.pkl/cast-array-8.pk: New test.
>       * testsuite/Makefile.am (EXTRA_DIST): Update.
> ---
>  ChangeLog                          |  8 ++++++++
>  libpoke/pkl-asm.c                  | 11 ++++++++++-
>  testsuite/Makefile.am              |  1 +
>  testsuite/poke.pkl/cast-array-8.pk |  9 +++++++++
>  4 files changed, 28 insertions(+), 1 deletion(-)
>  create mode 100644 testsuite/poke.pkl/cast-array-8.pk
>
> diff --git a/ChangeLog b/ChangeLog
> index f609f733..180b0902 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,11 @@
> +2023-02-18  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
> +
> +     * libpoke/pkl-asm.c (pkl_asm_insn_atoa): Do not use `PVM_NULL' as
> +     the bounder in the type of array.  Use a closure that returns
> +     `PVM_NULL'.
> +     * testsuite/poke.pkl/cast-array-8.pk: New test.
> +     * testsuite/Makefile.am (EXTRA_DIST): Update.
> +
>  2023-02-18  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
>  
>       * libpoke/pvm.jitter (wrapped-globals): Remove
> diff --git a/libpoke/pkl-asm.c b/libpoke/pkl-asm.c
> index 899d8303..0fde2cd9 100644
> --- a/libpoke/pkl-asm.c
> +++ b/libpoke/pkl-asm.c
> @@ -215,6 +215,8 @@ pkl_asm_insn_atoa (pkl_asm pasm,
>    /* Now process the array itself.  */
>    if (bound == NULL)
>      {
> +      pvm_val bounder;
> +
>        if (from_type && from_bound == NULL)
>          /* Both array types are unbounded, hence they are identical =>
>             no need to do anything.  */
> @@ -222,7 +224,14 @@ pkl_asm_insn_atoa (pkl_asm pasm,
>  
>        /* No checks are due in this case, but the value itself
>           should be typed as an unbound array.  */
> -      pkl_asm_insn (pasm, PKL_INSN_PUSH, PVM_NULL); /* ARR NULL */
> +
> +      /* Because `bound' is NULL, the bounder closure for `to_type'
> +         will do the right thing (which is returning PVM_NULL on
> +         invocation).  We set this bounder in the PVM type of
> +         the array.  */
> +      bounder = PKL_AST_TYPE_A_BOUNDER (to_type);
> +
> +      pkl_asm_insn (pasm, PKL_INSN_PUSH, bounder);  /* ARR CLS */
>        pkl_asm_insn (pasm, PKL_INSN_ASETTB);         /* ARR */
>      }
>    else
> diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am
> index 86a6478a..60cae4c1 100644
> --- a/testsuite/Makefile.am
> +++ b/testsuite/Makefile.am
> @@ -1043,6 +1043,7 @@ EXTRA_DIST = \
>    poke.pkl/cast-array-5.pk \
>    poke.pkl/cast-array-6.pk \
>    poke.pkl/cast-array-7.pk \
> +  poke.pkl/cast-array-8.pk \
>    poke.pkl/cast-array-diag-1.pk \
>    poke.pkl/cast-array-diag-2.pk \
>    poke.pkl/cast-array-diag-3.pk \
> diff --git a/testsuite/poke.pkl/cast-array-8.pk 
> b/testsuite/poke.pkl/cast-array-8.pk
> new file mode 100644
> index 00000000..b466b463
> --- /dev/null
> +++ b/testsuite/poke.pkl/cast-array-8.pk
> @@ -0,0 +1,9 @@
> +/* { dg-do run } */
> +
> +var a = [1,2,3] as int[],
> +    bounder_non_null_p =
> +        asm int<32>: ("typof; nip; tyagetb; nip; nn; nip" : a);
> +
> +/* { dg-command {.set obase 10} } */
> +/* { dg-command {bounder_non_null_p} } */
> +/* { dg-output "1" } */



reply via email to

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