poke-devel
[Top][All Lists]
Advanced

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

Re: [PATCH 2/2] MI: Add error reporting functionality for invalid msgs


From: Jose E. Marchesi
Subject: Re: [PATCH 2/2] MI: Add error reporting functionality for invalid msgs
Date: Sat, 07 Aug 2021 15:13:30 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)

Hi Mohammad.

>  static void
>  pk_mi_dispatch_msg (pk_mi_msg msg)
>  {
> -  if (pk_mi_msg_kind (msg) == PK_MI_MSG_REQUEST)
> +  const char* errmsg = "";
> +
> +  if (pk_mi_msg_kind (msg) != PK_MI_MSG_REQUEST) {
> +    errmsg = "expects request message";
> +    goto error;
> +  }

GNU coding style please.

> +  switch (pk_mi_msg_req_type (msg))
>      {
> -      switch (pk_mi_msg_req_type (msg))
> -        {
> -        case PK_MI_REQ_EXIT:
> -          {
> -            pk_mi_msg resp
> -              = pk_mi_make_resp (PK_MI_RESP_EXIT,
> -                                 pk_mi_msg_number (msg),
> -                                 1 /* success_p */,
> -                                 NULL /* errmsg */);
> -            pk_mi_send (resp);
> -            pk_mi_msg_free (resp);
> -            pk_mi_exit_p = 1;
> -            break;
> -          }
> -        case PK_MI_REQ_PRINTV:
> -          {
> -            int ok;
> -            pk_mi_msg resp;
> -            pk_val arg, val;
> -
> -            arg = pk_mi_get_arg (msg, "value");
> -
> -            ok = pk_defvar (poke_compiler, "__pkl_mi_value", arg);
> -            assert (ok == PK_OK);
> -
> -            ok = pk_compile_expression (poke_compiler,
> -                                        "format (\"%v\", __pkl_mi_value)",
> -                                        NULL, &val);
> -            assert (ok == PK_OK);
> -
> -            resp = pk_mi_make_resp (PK_MI_RESP_PRINTV, pk_mi_msg_number 
> (msg),
> -                                    1 /* success_p */, NULL /* errmsg */);
> -            pk_mi_set_arg (resp, "string", val);
> -            pk_mi_send (resp);
> -            pk_mi_msg_free (resp);
> -            break;
> -          }
> -        default:
> -          assert (0);
> -        }
> +    case PK_MI_REQ_EXIT:
> +      {
> +        pk_mi_msg resp
> +          = pk_mi_make_resp (PK_MI_RESP_EXIT,
> +                             pk_mi_msg_number (msg),
> +                             1 /* success_p */,
> +                             NULL /* errmsg */);
> +        pk_mi_send (resp);
> +        pk_mi_msg_free (resp);
> +        pk_mi_exit_p = 1;
> +        break;
> +      }
> +    case PK_MI_REQ_PRINTV:
> +      {
> +        int ok;
> +        pk_mi_msg resp;
> +        pk_val arg, val;
> +
> +        arg = pk_mi_get_arg (msg, "value");
> +
> +        ok = pk_defvar (poke_compiler, "__pkl_mi_value", arg);
> +        assert (ok == PK_OK);
> +
> +        ok = pk_compile_expression (poke_compiler,
> +                                    "format (\"%v\", __pkl_mi_value)",
> +                                    NULL, &val);
> +        assert (ok == PK_OK);
> +
> +        resp = pk_mi_make_resp (PK_MI_RESP_PRINTV, pk_mi_msg_number (msg),
> +                                1 /* success_p */, NULL /* errmsg */);
> +        pk_mi_set_arg (resp, "string", val);
> +        pk_mi_send (resp);
> +        pk_mi_msg_free (resp);
> +        break;
> +      }
> +    default:
> +      errmsg = "invalid request type";
> +      goto error;
>      }
> -  else
> -    {
> -      pk_mi_msg invreq_msg = pk_mi_make_event (PK_MI_EVENT_INVREQ);
>  
> -      pk_mi_set_arg (invreq_msg, "reqnum",
> -                     pk_make_uint (pk_mi_msg_number (msg), 64));
> -      pk_mi_send (invreq_msg);
> -      pk_mi_msg_free (invreq_msg);
> -    }
> +  goto done;
> +
> +error:
> +  pk_mi_invalid_msg (msg, errmsg);

I would call that function with a more explicit pk_mi_send_invalid_msg.

Other than that, this series is OK for both master and maint/poke-1.
Thanks!




reply via email to

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