[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] libpoke: typify: Make cast error msgs more helpful
From: |
Jose E. Marchesi |
Subject: |
Re: [PATCH] libpoke: typify: Make cast error msgs more helpful |
Date: |
Wed, 07 Jul 2021 18:46:38 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) |
Hi Mohammad.
> Type checking for "cast to struct type", incorrectly reports the
> location of expression's type, instead of the location of
> expression itself. This leads to a confusing error message when the
> expression is a function call.
>
> Running this code:
>
> ```
> fun f = uint16: { return 0; }
> type HL16 = struct uint<16> { uint8 hi; uint8 lo; };
> f as HL16;
> ```
>
> Emits this error message (which is confusing):
>
> ```
> t.pk:1:9: error: invalid cast, expected struct
> fun f = uint16: { return 0; }
> ^~~~~~
> ```
>
> New behavior:
>
> ```
> t.pk:3:1: error: invalid cast, expected struct, got ushort
> f as HiLo16;
> ^
> ```
>
> Besides this fix, this commit also adds the type name of the unexpected
> type in the error message.
OK for both master and maint/poke-1. Thanks.
> 2021-07-06 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
>
> * libpoke/pkl-typify.c (pkl_typify1_ps_cast): Make cast error
> messages more helpful.
> ---
> ChangeLog | 5 +++++
> libpoke/pkl-typify.c | 15 ++++++++++-----
> 2 files changed, 15 insertions(+), 5 deletions(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index 76ea7c5d..2abd0dea 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,8 @@
> +2021-07-06 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
> +
> + * libpoke/pkl-typify.c (pkl_typify1_ps_cast): Make cast error
> + messages more helpful.
> +
> 2021-06-06 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
>
> * common/pk-utils.h (pk_format_binary): New function declaration.
> diff --git a/libpoke/pkl-typify.c b/libpoke/pkl-typify.c
> index 103d5113..73725ada 100644
> --- a/libpoke/pkl-typify.c
> +++ b/libpoke/pkl-typify.c
> @@ -493,8 +493,10 @@ PKL_PHASE_BEGIN_HANDLER (pkl_typify1_ps_cast)
> if (PKL_AST_TYPE_CODE (type) == PKL_TYPE_STRUCT
> && PKL_AST_TYPE_CODE (exp_type) != PKL_TYPE_STRUCT)
> {
> - PKL_ERROR (PKL_AST_LOC (exp_type),
> - "invalid cast, expected struct");
> + char *found_type = pkl_type_str (exp_type, 1);
> +
> + PKL_ERROR (PKL_AST_LOC (exp),
> + "invalid cast, expected struct, got %s", found_type);
> PKL_TYPIFY_PAYLOAD->errors++;
> PKL_PASS_ERROR;
> }
> @@ -509,9 +511,12 @@ PKL_PHASE_BEGIN_HANDLER (pkl_typify1_ps_cast)
> ;
> else
> {
> - PKL_ERROR (PKL_AST_LOC (type),
> - "invalid cast, expected struct%s",
> - PKL_AST_TYPE_S_ITYPE (exp_type) ? " or integer" : "");
> + char *type_str = pkl_type_str (type, 1);
> +
> + PKL_ERROR (
> + PKL_AST_LOC (type), "invalid cast, expected struct%s, got %s",
> + PKL_AST_TYPE_S_ITYPE (exp_type) ? " or integral type" : "",
> + type_str);
> PKL_TYPIFY_PAYLOAD->errors++;
> PKL_PASS_ERROR;
> }