From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5312 invoked by alias); 27 Nov 2017 16:41:11 -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 5301 invoked by uid 89); 27 Nov 2017 16:41:10 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-11.9 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_2,GIT_PATCH_3,KB_WAM_FROM_NAME_SINGLEWORD autolearn=ham version=3.3.2 spammy= X-HELO: sessmg22.ericsson.net Received: from sessmg22.ericsson.net (HELO sessmg22.ericsson.net) (193.180.251.58) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 27 Nov 2017 16:41:08 +0000 Received: from ESESSHC015.ericsson.se (Unknown_Domain [153.88.183.63]) by sessmg22.ericsson.net (Symantec Mail Security) with SMTP id 5E.1C.19528.1204C1A5; Mon, 27 Nov 2017 17:41:05 +0100 (CET) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.63) with Microsoft SMTP Server (TLS) id 14.3.352.0; Mon, 27 Nov 2017 17:41:03 +0100 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=simon.marchi@ericsson.com; Received: from [142.133.61.121] (192.75.88.130) by AM3PR07MB308.eurprd07.prod.outlook.com (2a01:111:e400:881b::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.282.3; Mon, 27 Nov 2017 16:41:02 +0000 Subject: Re: [RFA] C++-ify parser_state To: Tom Tromey , References: <20171126174047.23943-1-tom@tromey.com> From: Simon Marchi Message-ID: <82650820-b9f1-c45f-2243-89b47ec00e59@ericsson.com> Date: Mon, 27 Nov 2017 16:41:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: <20171126174047.23943-1-tom@tromey.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-ClientProxiedBy: DM5PR06CA0069.namprd06.prod.outlook.com (2603:10b6:3:37::31) To AM3PR07MB308.eurprd07.prod.outlook.com (2a01:111:e400:881b::19) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b05e13b8-1166-48b9-5243-08d535b5a5b3 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603199);SRVR:AM3PR07MB308; X-Microsoft-Exchange-Diagnostics: 1;AM3PR07MB308;3:4tf9wUv94LIjrDX/4hTsya8BQ87EBiIza1cpE66DX9VY1u2jJf6ernlWmQp5YWIoNia1kKSuHJtHi7du1YFA0YQIwawg8w3DV+VA+13lk2r1earlJ30WpSdMssNUQU9RQdLVLYdM+KENRsqV3zPhRVsxRoNs9tFBugx8cRJRLgU9+8KtiPxYEeYKU1FWaxaCHKncwRCp4SYllsOgN2J2JtJmA8c5TlTSJSVy/7qN7TbMd4b8gcp6bINq7Ybkn7au;25:+ZA0dp+y4FX6TnKXyq2QhESnX0ePUIkDvG9KEgCm1NLMSWocg77W0EmCuDcoebu4bwHf9zyx67GvP00GKzPr2w4tMc+pK/4UyszupSU3QnTDyu6qux46Sq9pMwTupEelZ7wTXQ4RAIqouGi6M2F3RAP7aDuxYMNq/MEdLmYeUP8NFbkxLJsH2xKr2k76YoVOMoS9x5nRCiqODTd55t4stoGf3GvAsfqZ41CpZIhgSvI3UKSKwaVuKARKYdClrrch42wEl8QJEFPnB7egcrycZUPJ3y00cPMWoa1ksnpyd8wZPtRzbQFTTtxM/Qf35g6hMiuwiuiRTlj+BO0z5o6REqCLVWTGUp58t6Rl57YCOtA=;31:Hp4D+62vRyIS/TVWKSWuQpvknVSoYP0WMi1sUEba8su+/QhyhK/iZHvWTumHLG80S7i893IWwfuPOV4aqVVWRgDZtbOzTVa8/3FQIOkZOdH2jyQVRWexJLkkRH9EC/YYlhgTkTxw5XaPmcOgQEoVafoJwyHYL5SK6M8NQYo2qTkJwXkEmbGTE8gOJXVkq2Mo3gbJQ0jLg5Wsb1BbffUfdlK5pZLs7xww+Zq34bO2Iw0= X-MS-TrafficTypeDiagnostic: AM3PR07MB308: X-Microsoft-Exchange-Diagnostics: 1;AM3PR07MB308;20:9FFIVKYaMYAueV/y/GxEezIonDiGcsntNw8fEcVpYvdkorijGFVzNOfDHBLbKsaLKZz1SpJ92Wj81DRh/3695wrZwoqd9A4INvWHY8pdTfGD3LgilDDmcfyv5Rc28rvHsKy1S/ibBOLAGcyBLXFdhpKOLSkPiIwi/vNUcl/FP0q5PZVHwJcMXzRTiFywcduQ9+zf8IP2UxJxepPLkTw3u2TcgwypArEvEE4dKYNP4O37gtkUT6FiSECN6SJW8LosHfcEdB1o1eIt/V/LXRr60EnmzK+v0t/3DBySDz9rfvYUljtdbx+KeGKLFUYr+UAqyXn/wpNTQAZje3izDZ1rHWeHAoL+ttY85eiKHZGBEHPQ9zbqckeiSGvprMwDWogC+SYMUFYIHxx1TQc3dOqMjSq3D/RRssvFzFETMmkvX6jf+Itl0k418u8RRhJ0ZES4+l7EvSvr553TeiUZYn6xWklFH1NQkIRrBol7SCVC7rGJtfkf4bvZxtT3VQuMMPzn;4:mjk0wjf6x/MYz6ELZPGpApm8Wtfhcs9I5A+oPfasbwP8stISGf46RQ7lRdD2+Og/Z6gT/DK+2dhr7ZNgovOUbGcZKoXZpNGFLoLfcQYGGhsHZ5rfAdLDMTLvZUv9fj2AUDIv8qhVPmVy+3fkHPHm4hS1QFgZoaHYlJN4SDyru/VgcTsaCs0YLZEFzkNbLNj0+MaCRbx7IRtSM2cPS0kXY86jwY+JEXEzHzR1M5CKNBev1CwWCfVAAWACnVlUg15TN+ohl+3KVsNPWOswiPEQGi2+H9ReQ6z/JUmGutKmtHPK5dsSc/I5zttBe3cUdp7LNAeaiRSWxqxSKxGnIZTaOyEVMoP4W+HWzDaJdYHqDbk= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(131327999870524)(17755550239193); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(2401047)(5005006)(8121501046)(3231022)(10201501046)(3002001)(93006095)(93001095)(6041248)(20161123558100)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123562025)(20161123555025)(6072148)(201708071742011);SRVR:AM3PR07MB308;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:AM3PR07MB308; X-Forefront-PRVS: 0504F29D72 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(6049001)(366004)(376002)(346002)(39860400002)(24454002)(377424004)(199003)(189002)(50986999)(101416001)(50466002)(64126003)(478600001)(49976008)(33646002)(54356999)(76176999)(36756003)(81166006)(31686004)(230700001)(106356001)(66066001)(65956001)(65806001)(81156014)(47776003)(105586002)(189998001)(83506002)(2906002)(8676002)(25786009)(3846002)(316002)(97736004)(229853002)(16576012)(53546010)(2950100002)(4001150100001)(86362001)(5660300001)(6486002)(68736007)(58126008)(6246003)(6116002)(305945005)(65826007)(16526018)(52116002)(6666003)(8936002)(7736002)(53936002)(2486003)(52146003)(23676004)(31696002)(78286006);DIR:OUT;SFP:1101;SCL:1;SRVR:AM3PR07MB308;H:[142.133.61.121];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; Received-SPF: None (protection.outlook.com: ericsson.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTTNQUjA3TUIzMDg7MjM6WjljN01oaDU5bG0rL1NnZFJrQ0ZOajdHRHdX?= =?utf-8?B?TCtZWlE3VlhXaTBUeXIzREM0SUJnOGwxMWlSaWw3cnhSczBvdGZQT1puYjFz?= =?utf-8?B?d3R2VEp2c1BYUE5vemdCU0Nlc3lIZHV3ZVRiOHdiditrSkp5YXJ6QWVKMHo1?= =?utf-8?B?Qm9tUlgvTzR4bTNuREdTQk1Wd0FtQTk0dktSbU9tYWtqNkhDYXZpNjUwOGZO?= =?utf-8?B?SjhQMmM4MmtveWJVSjBFajNhOGE1aUVVenRXaXlsK1hNMDVTaWlSS3pyc0ZX?= =?utf-8?B?cGVHcm5DeTNsR2ZDN2lOTkhBR2xJWnQ2eWthc2ZwUlFEcXNwSW5GMXBTM1V2?= =?utf-8?B?anZDaW9iZzR0VEhVWGNoR3Q2M0NYalliRGJwbTVFSzdYclJtdTRsVDRxSEM3?= =?utf-8?B?c1ZGNDVZekJ6Y20rN0tOWkJTSGhmVmo0eDhROU5KMDMrbW84WUhiTnJRSFY4?= =?utf-8?B?ejhTSnJQYTFlOUwvaGc2ZGVQMjVxVVpiendDTXdDS3AzUzVoMnR0OFJnU0dj?= =?utf-8?B?MnFCUjVjWi9wMXhIUmhXZmsxUGxsTmVTVzJTc3gzWHZacHlxMXdhOVhBUWtC?= =?utf-8?B?bU9ZTzdVUEJoOHdYY3BjWVJrNVE2NktHOGVGU0djSTRkSy9ZaFEzNlhScFlo?= =?utf-8?B?aGY3MXhMVjEyV2hmd3I5N2N5cFdqbGszbGV2dUtySlo0L1NPMDhRR0J0YXYv?= =?utf-8?B?eUNnSVRvekRieHB0emZTTGY3ayt4emtvR1JpTlpPWVNkbUVpeUZMdk9iQ0tC?= =?utf-8?B?VTBjZ0sxb2lJdExvdjh3aElYenpsMG1neHc3Q0JZdmMxZ3Z5NTI5VnUwVlMr?= =?utf-8?B?QzRSNzZKb3ZmbVVNbGFhd1JSMFF6aHp1dFh6SldZbWxTRzlzZEx0SVBRWmpM?= =?utf-8?B?M2c2YVNkMGY5SDJWVVNIR04yWDFOcEhYRkV3WitCQVVqQTlnQm15dEtrY1lu?= =?utf-8?B?emN2MGM2UGNOenNwU0FiY2htbHhGTDQwRUw3L2JrZWlWd1dQWWV1QUU3Wklo?= =?utf-8?B?RERHcXY2TkZUcGFuOUEyS2s2eXhpNllycVdvWW5odndid3pldWdyODRlU2Q3?= =?utf-8?B?Lzc4aVlJcWo4UldDNTRWbGs2d016SXQ1eVZlcGlSUXk4V0c4Z1RwL0tINmw4?= =?utf-8?B?QUc1ZjU1M3JCd0hkZUZKL3pWSGRRZXdFeGFQbUQ3dUdaVVBvVTRjcGtpYXZq?= =?utf-8?B?S0lpMzVzMDU0ZEtJSTdweDU2UXZZYnVJb2taY0NFOVpQbndyVmg5bWNTRlA3?= =?utf-8?B?cUlUWmdJeDdvVUpDbW0yMHVOUEFoYSs3REtpSnpKaUZnSjZEZlRqUHhmZ2Vi?= =?utf-8?B?RmJ0a291elRSc2hidG9YdGF0Qzl4cWlpMTI4VlBzQmRrNlh2eGcxUHBkZmov?= =?utf-8?B?SU80d21JcEUxMzFvN3FnWmlmaUtxZWZ0ZTc3MHBwZGxFcWhjSW1wa1V5cXEr?= =?utf-8?B?NFFFTkFwQmdtOVZPYTNES3VmcDgwV3JWM25MNmhrQnNyY2tsZ3JtdVRFWkRu?= =?utf-8?B?Q3lBRDB6WmJ1ekNoRk5WMmFjV0tDV2xvaG1CNjdHdDNudHVzdDBRMSt4RnVv?= =?utf-8?B?MWYvL2xpb28vS1ZCeTBseFhjTzRFWUJLSVE4YVRyYm5RemFTU3dqNEViMC9j?= =?utf-8?B?NHdsTGNCZENNenJuYlpKRjBZejJzUjZ3bzN6VFl3QWJZOEM3MEcydVFLdEF4?= =?utf-8?B?SmM0Vk9vWVZrdlkrSTZ4aEh3bE9vOU1QQjUxbFFoajRadzBwWnA0OWd6RGF5?= =?utf-8?B?VC9JdjBQbE5IbnNqRnZEd3c3RlpGd3hBbkFVWjZlNU5CWXBpc0VEQ1FyZ3Fm?= =?utf-8?B?dmVoaVhjbmh5ZUkxSWprd2dmNEtWWTh0cUdzbDIxM1R4b055cVl2cVFtQWFS?= =?utf-8?B?Rm8wWm50ZUVPWFg0eVhMN28rdGxLQUFQZUhrNVhKdkQ3ZXFVSXRScTFZYlAw?= =?utf-8?B?T08vQXBNM1JFNS9oSzNEa1VGdjREOExIRHlGZFllNGNqTjFFSXZHYzZvSlls?= =?utf-8?Q?ReGG5?= X-Microsoft-Antispam-Message-Info: ClgVTYeXyj5niO2IqVr7C4gQAXnihvrGSE8rFIxRBT4zuXJ13iGjgcH85QlAEKWly27iMLde9DtaaljgxiGNnyffjP9t9oYsqmtPYLqIgO8hJM+K9TvkdBXHizXsqRm7SHURwwLwpDOR68mzmn9En6ktxtMQw5NTI+lzICdJ8oytC4qgptyMcvDiXWEgKeNepRQnQXoLYUOEaqBAwpVsaw== X-Microsoft-Exchange-Diagnostics: 1;AM3PR07MB308;6:P8ZZE5O8UrHzYZ1vIy6JtiCX3rndZF5OsRX9N4i9yqcs0wK8D1NLi2/9ZTzFMYZ1Nl8th96XbK8TzW7Qszz5CyvaL/LUaVUkOAtT72+uCUYSEzhg4Xep8Y0AHstALXGh9RwcfSzebfijeBWePLiD5jD00od/WJlsa2sPEzZPNvxzjefnz/2IwZJnaSg5nZKLLZ8nRIteGa188cVgohUiuWvBuBD1Qj1PIvhZzFhFPmkY5E87oVeiKFhC5ZL9eM8oaUiX+5Sz6cSh1D1Xdu3HmQbpIRAq8LmPqq1QSNBTcyb2ACWB/7hvlExQg0bnNuEAjTPguo5eJzy3+dk/VcCzU4KntCp7DQ/qAO3VI84hk1s=;5:vGTwxhTgx4u2EellxLyRQ8L+DQRNOwRYHJwofDHG9QV9i+kzFdXH7asoWjGXcEqWbw5+bMe7b5Iye/38pMl6zNxewgcNdM/Eh0ah6E2WQCEM8n+7ANqgCiBvLM1glIHR0HK5wWqdKa7H1M+RB+qahUFFAHmcmXjZzx8+pNLLOFQ=;24:uIUFUnFA1agIdaRskb5F6jaIUCFgHps9OQtKDkS3MWnUaUkDoi0nbqMsvoHqGqGa91+8fjIPT5of3I2ZvBBlg/4QJoltEyiEP6baL6Xrijg=;7:uqv3xHMhFROkmj+lIf79K1qrlpBunBBjhk+2U52sFuDyU4EcuOgLA8ILJLtfqIff9Og5q5kzYekTg95K50k2tfU+vtXZldDTnARUX48UTYJTN6XW871GeEaBeS/rE4X5/JfKBHPiK34cIIveFnuhMxu5hPvlpL5FcLanLAEADc+AmJjjld5Mw2Da6ncjMNtzA2sMSZL+JmDjF5gJN2hFmPV46E/jsj5wI89AXo3ykWLSvbNrFVrN16wSeoHYXYD8 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2017 16:41:02.2044 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b05e13b8-1166-48b9-5243-08d535b5a5b3 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR07MB308 X-OriginatorOrg: ericsson.com X-IsSubscribed: yes X-SW-Source: 2017-11/txt/msg00687.txt.bz2 Hi Tom, I think this looks good. I have some suggestions to clean things a further bit, you are free to take them or leave them On 2017-11-26 12:40 PM, Tom Tromey wrote: > +expression_up > +parser_state::release () > { > /* Record the actual number of expression elements, and then > reallocate the expression memory so that we free up any > excess elements. */ > > - ps->expout->nelts = ps->expout_ptr; > - ps->expout = (struct expression *) > - xrealloc (ps->expout, > + expout->nelts = expout_ptr; > + expout = (struct expression *) > + xrealloc (expout, > sizeof (struct expression) > - + EXP_ELEM_TO_BYTES (ps->expout_ptr)); > + + EXP_ELEM_TO_BYTES (expout_ptr)); > + > + expression_up result (expout); > + /* Ensure that we don't free it in the destructor. */ > + expout = nullptr; > + return result; If expout was an expression_up, we could just std::move it here, and wouldn't need an explicit destructor. > } > > /* This page contains the functions for adding data to the struct expression > @@ -1118,7 +1127,6 @@ parse_exp_in_context_1 (const char **stringptr, CORE_ADDR pc, > int comma, int void_context_p, int *out_subexp) > { > const struct language_defn *lang = NULL; > - struct parser_state ps; > int subexp; > > lexptr = *stringptr; > @@ -1194,7 +1202,7 @@ parse_exp_in_context_1 (const char **stringptr, CORE_ADDR pc, > and others called from *.y) ensure CURRENT_LANGUAGE gets restored > to the value matching SELECTED_FRAME as set by get_current_arch. */ > > - initialize_expout (&ps, 10, lang, get_current_arch ()); > + parser_state ps (10, lang, get_current_arch ()); > > scoped_restore_current_language lang_saver; > set_language (lang->la_language); > @@ -1207,33 +1215,32 @@ parse_exp_in_context_1 (const char **stringptr, CORE_ADDR pc, > CATCH (except, RETURN_MASK_ALL) > { > if (! parse_completion) > - { > - xfree (ps.expout); > - throw_exception (except); > - } > + throw_exception (except); > } > END_CATCH > > - reallocate_expout (&ps); > + /* We have to operate on an "expression *", due to la_post_parser, > + which explains this funny-looking double release. */ > + struct expression *result = ps.release ().release (); > > /* Convert expression from postfix form as generated by yacc > parser, to a prefix form. */ > > if (expressiondebug) > - dump_raw_expression (ps.expout, gdb_stdlog, > + dump_raw_expression (result, gdb_stdlog, > "before conversion to prefix form"); > > - subexp = prefixify_expression (ps.expout); > + subexp = prefixify_expression (result); > if (out_subexp) > *out_subexp = subexp; > > - lang->la_post_parser (&ps.expout, void_context_p); > + lang->la_post_parser (&result, void_context_p); Passing a pointer or reference to the unique_ptr would allow the implementations of la_post_parser to modify it directly, and avoid the .release ().release (). > --- a/gdb/stap-probe.c > +++ b/gdb/stap-probe.c > @@ -1146,25 +1146,17 @@ static expression_up > stap_parse_argument (const char **arg, struct type *atype, > struct gdbarch *gdbarch) > { > - struct stap_parse_info p; > - struct cleanup *back_to; > - > /* We need to initialize the expression buffer, in order to begin > our parsing efforts. We use language_c here because we may need > to do pointer arithmetics. */ > - initialize_expout (&p.pstate, 10, language_def (language_c), gdbarch); > - back_to = make_cleanup (free_current_contents, &p.pstate.expout); > + struct stap_parse_info p (10, language_def (language_c), gdbarch); > > p.saved_arg = *arg; > p.arg = *arg; > p.arg_type = atype; > - p.gdbarch = gdbarch; > - p.inside_paren_p = 0; Why not pass the other arguments to the constructor (*arg and atype)? Simon