From patchwork Thu May 18 20:18:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 69633 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D619A3836EA6 for ; Thu, 18 May 2023 20:19:02 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D619A3836EA6 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1684441142; bh=QgrM7Y8T6usk7DLj3PECZcUbNPmsr9Sb7DMQU14/q7s=; h=Date:Subject:References:In-Reply-To:To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=oa1enLcWCDB+gqDvUfbczz0w9S1Q+fws3siObWey2FdOMHQr4NSJfzzNEvMRJ0Es0 84qbgUg6gYCk1kwUPYJoCV9L88tfvn0mGxM/b5RNWsw84K/rXGPbioy2vubsoqcNvY HqvT1E1St+PtUsMv/G0S00+2jNGFXrXpsLasswHY= X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd2e.google.com (mail-io1-xd2e.google.com [IPv6:2607:f8b0:4864:20::d2e]) by sourceware.org (Postfix) with ESMTPS id F176A3858415 for ; Thu, 18 May 2023 20:18:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F176A3858415 Received: by mail-io1-xd2e.google.com with SMTP id ca18e2360f4ac-76c64ddee11so62620639f.2 for ; Thu, 18 May 2023 13:18:12 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684441092; x=1687033092; h=to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QgrM7Y8T6usk7DLj3PECZcUbNPmsr9Sb7DMQU14/q7s=; b=fSnA6F7pHQWjzd0g9d/pSAkH2/uCkw/pwGBDhK7ypiDhvQ9IPeEjoyBLzbWlUoPP5n pG3D6Ih1MIJkm0jW64mNhESy5EmwjiuzE0UO45xP/nSjY/5SB4TWZs5OpIskxsxU4m10 H5b/jnEpbBA5VtAyLOqvBwQdvHmycgv3mL1u8B/AWRZ3zgxQzeR4aan9RrIrXpdsUYCB La1f9XtT8n3kQrRV3zhy8hcjyp1HzGgswPCwRvJ2cnZQczZYxFUMfpN7bLuOM70DYz26 oFEKoLUzUX9ERtraWGA+2qrs5hT4BfMF7SDxiu8fSp1KGby1hvhP+cY1MoXT3ORTQga4 IX5g== X-Gm-Message-State: AC+VfDzY2A7UU29/iDWTzurIXDYPCNpZo+U/o49NQx/C2d5zNocg9Qqz E6icxTW2UacYdHYpmQqinvzoB2DaPvUIPxTZqf2J8A== X-Google-Smtp-Source: ACHHUZ5Wh1GB9CYp7nrBSwrFwdfhnmOtO+VLwv7r1leojeyrZn5pUPeoiPZrVg2ADoakvxeUYetOtg== X-Received: by 2002:a6b:620e:0:b0:76c:5641:136 with SMTP id f14-20020a6b620e000000b0076c56410136mr6595569iog.0.1684441092648; Thu, 18 May 2023 13:18:12 -0700 (PDT) Received: from localhost.localdomain (75-166-157-55.hlrn.qwest.net. [75.166.157.55]) by smtp.gmail.com with ESMTPSA id i9-20020a05663813c900b00418ba399842sm703087jaj.13.2023.05.18.13.18.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 May 2023 13:18:12 -0700 (PDT) Date: Thu, 18 May 2023 14:18:12 -0600 Subject: [PATCH v2 6/9] Introduce mi_parse helper methods MIME-Version: 1.0 Message-Id: <20230404-dap-loaded-sources-v2-6-93f229095e03@adacore.com> References: <20230404-dap-loaded-sources-v2-0-93f229095e03@adacore.com> In-Reply-To: <20230404-dap-loaded-sources-v2-0-93f229095e03@adacore.com> To: gdb-patches@sourceware.org X-Mailer: b4 0.12.2 X-Spam-Status: No, score=-11.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Tom Tromey via Gdb-patches From: Tom Tromey Reply-To: Tom Tromey Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" This introduces some helper methods for mi_parse that handle some of the details of parsing. This approach lets us reuse them later. --- gdb/mi/mi-parse.c | 69 +++++++++++++++++++++++++++++++++++++++++-------------- gdb/mi/mi-parse.h | 9 ++++++++ 2 files changed, 61 insertions(+), 17 deletions(-) diff --git a/gdb/mi/mi-parse.c b/gdb/mi/mi-parse.c index b7c5a8cecdf..09207164291 100644 --- a/gdb/mi/mi-parse.c +++ b/gdb/mi/mi-parse.c @@ -215,6 +215,54 @@ mi_parse::~mi_parse () freeargv (argv); } +/* See mi-parse.h. */ + +void +mi_parse::set_thread_group (const char *arg, char **endp) +{ + if (thread_group != -1) + error (_("Duplicate '--thread-group' option")); + if (*arg != 'i') + error (_("Invalid thread group id")); + arg += 1; + thread_group = strtol (arg, endp, 10); +} + +/* See mi-parse.h. */ + +void +mi_parse::set_thread (const char *arg, char **endp) +{ + if (thread != -1) + error (_("Duplicate '--thread' option")); + thread = strtol (arg, endp, 10); +} + +/* See mi-parse.h. */ + +void +mi_parse::set_frame (const char *arg, char **endp) +{ + if (frame != -1) + error (_("Duplicate '--frame' option")); + frame = strtol (arg, endp, 10); +} + +/* See mi-parse.h. */ + +void +mi_parse::set_language (const char *arg, const char **endp) +{ + std::string lang_name = extract_arg (&arg); + + language = language_enum (lang_name.c_str ()); + if (language == language_unknown) + error (_("Invalid --language argument: %s"), lang_name.c_str ()); + + if (endp != nullptr) + *endp = arg; +} + std::unique_ptr mi_parse::make (const char *cmd, char **token) { @@ -295,13 +343,8 @@ mi_parse::make (const char *cmd, char **token) char *endp; option = "--thread-group"; - if (parse->thread_group != -1) - error (_("Duplicate '--thread-group' option")); chp += tgs; - if (*chp != 'i') - error (_("Invalid thread group id")); - chp += 1; - parse->thread_group = strtol (chp, &endp, 10); + parse->set_thread_group (chp, &endp); chp = endp; } else if (strncmp (chp, "--thread ", ts) == 0) @@ -309,10 +352,8 @@ mi_parse::make (const char *cmd, char **token) char *endp; option = "--thread"; - if (parse->thread != -1) - error (_("Duplicate '--thread' option")); chp += ts; - parse->thread = strtol (chp, &endp, 10); + parse->set_thread (chp, &endp); chp = endp; } else if (strncmp (chp, "--frame ", fs) == 0) @@ -320,21 +361,15 @@ mi_parse::make (const char *cmd, char **token) char *endp; option = "--frame"; - if (parse->frame != -1) - error (_("Duplicate '--frame' option")); chp += fs; - parse->frame = strtol (chp, &endp, 10); + parse->set_frame (chp, &endp); chp = endp; } else if (strncmp (chp, "--language ", ls) == 0) { option = "--language"; chp += ls; - std::string lang_name = extract_arg (&chp); - - parse->language = language_enum (lang_name.c_str ()); - if (parse->language == language_unknown) - error (_("Invalid --language argument: %s"), lang_name.c_str ()); + parse->set_language (chp, &chp); } else break; diff --git a/gdb/mi/mi-parse.h b/gdb/mi/mi-parse.h index 6f1da6e6eb5..19c41f23ed6 100644 --- a/gdb/mi/mi-parse.h +++ b/gdb/mi/mi-parse.h @@ -84,6 +84,15 @@ struct mi_parse mi_parse () = default; + /* Helper methods for parsing arguments. Each takes the argument + to be parsed. It will either set a member of this object, or + throw an exception on error. In each case, *ENDP, if non-NULL, + will be updated to just after the argument text. */ + void set_thread_group (const char *arg, char **endp); + void set_thread (const char *arg, char **endp); + void set_frame (const char *arg, char **endp); + void set_language (const char *arg, const char **endp); + std::string m_args; };