From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 116022 invoked by alias); 5 Jun 2017 19:27:44 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 115997 invoked by uid 89); 5 Jun 2017 19:27:43 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.0 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: gproxy9.mail.unifiedlayer.com Received: from gproxy9-pub.mail.unifiedlayer.com (HELO gproxy9.mail.unifiedlayer.com) (69.89.20.122) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 05 Jun 2017 19:27:42 +0000 Received: from cmgw2 (unknown [10.0.90.83]) by gproxy9.mail.unifiedlayer.com (Postfix) with ESMTP id 4A9861E0734 for ; Mon, 5 Jun 2017 13:27:45 -0600 (MDT) Received: from box522.bluehost.com ([74.220.219.122]) by cmgw2 with id V7Ti1v00L2f2jeq017Tl53; Mon, 05 Jun 2017 13:27:45 -0600 X-Authority-Analysis: v=2.2 cv=Ibz3YSia c=1 sm=1 tr=0 a=GsOEXm/OWkKvwdLVJsfwcA==:117 a=GsOEXm/OWkKvwdLVJsfwcA==:17 a=LWSFodeU3zMA:10 a=20KFwNOVAAAA:8 a=B2lJatrS9KnlX_cWV2kA:9 Received: from 174-29-39-24.hlrn.qwest.net ([174.29.39.24]:41402 helo=pokyo) by box522.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.87) (envelope-from ) id 1dHxfC-0004Ud-07; Mon, 05 Jun 2017 13:27:42 -0600 From: Tom Tromey To: Pedro Alves Cc: Tom Tromey , gdb-patches@sourceware.org Subject: Re: [RFA 2/2] C++-ify break-catch-throw References: <20170604225353.18008-1-tom@tromey.com> <20170604225353.18008-3-tom@tromey.com> <01e777c7-a287-8dfe-dd21-370690ed6629@redhat.com> <19aada83-3165-d488-c5ca-5de7f4b4f1ca@redhat.com> Date: Mon, 05 Jun 2017 19:27:00 -0000 In-Reply-To: (Pedro Alves's message of "Mon, 5 Jun 2017 13:29:36 +0100") Message-ID: <871sqy6xqq.fsf@pokyo> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BWhitelist: no X-Exim-ID: 1dHxfC-0004Ud-07 X-Source-Sender: 174-29-39-24.hlrn.qwest.net (pokyo) [174.29.39.24]:41402 X-Source-Auth: tom+tromey.com X-Email-Count: 4 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTIyLmJsdWVob3N0LmNvbQ== X-SW-Source: 2017-06/txt/msg00134.txt.bz2 >>>>> "Pedro" == Pedro Alves writes: Pedro> So something like this. Builds and gdb starts, but I have Pedro> not regtested it. Thanks for doing this. I should have noticed the compile_rx_or_error problem in my patch -- IIRC I wrote compile_rx_or_error and even violated my own rule about cleanup naming (that cleanup-returning functions should start "make_cleanup_") at the time. Double ouch. Pedro> In a couple places, this either forces moving the regex object Pedro> to the heap, or to wrap it in gdb::optional. In the cases Pedro> where we already have to keep the regex string around, Pedro> it ends up being not maximally efficient memory-wise, but I don't Pedro> think it really matters. We're considering std::string for Pedro> those same strings, which grows the structs more than that, anyway Pedro> (for size/capacity). I was thinking that perhaps the regexp object should just have its own optionality. But, I think your way is also fine, maybe more principled in a way. I didn't look at all the cases, but at least for "catch throw" it doesn't seem to matter much. For a few bytes in that structure to be a problem, someone would have to use thousands or millions of catchpoints, which seems absurd. Pedro> WDYT? Looks great, I will wait for this to land before round 2. Pedro> +ada_add_standard_exceptions (gdb_regex *preg, VEC(ada_exc_info) **exceptions) The various callees could use const if the exec method was const. Pedro> + /* Compile a regexp and throw an exception on error, including Pedro> + MESSAGE. REGEX and MESSAGE must not be NULL. */ Pedro> + gdb_regex (const char *regex, int cflags, Pedro> + const char *message); Use ATTRIBUTE_NONNULL? Pedro> + /* Wrapper around ::regexec. */ Pedro> + int exec (const char *string, size_t nmatch, regmatch_t pmatch[], int eflags); Pedro> + Pedro> + /* Wrapper around ::re_search. */ Pedro> + int search (const char *string, int size, Pedro> + int startpos, int range, struct re_registers *regs); Could both be 'const', I think. Tom