From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lj1-x229.google.com (mail-lj1-x229.google.com [IPv6:2a00:1450:4864:20::229]) by sourceware.org (Postfix) with ESMTPS id 6A69038582A1 for ; Wed, 17 Aug 2022 22:04:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6A69038582A1 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com Received: by mail-lj1-x229.google.com with SMTP id l21so83562ljj.2 for ; Wed, 17 Aug 2022 15:04:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; h=mime-version:user-agent:references:message-id:in-reply-to:subject :cc:to:from:date:from:to:cc; bh=mGASevAIQFRUaf7lkUBhnO0qIsdjeqghm4O7cFFh0lY=; b=geW9pZGln9hlN3u4l+llcfIvwYOiY+V08tagnP7HNyQ2sTyaamZy9XNCft2EXU6sjU KLaIHk7O6ISoPkLwYXP1taH3HQcTT9pzNCKcz8UIsSIDLBI61DSLB9PsUYCeBtdBOTi/ yn9tHiNMHqpgZjGqkFYXTcGUZYJuuKWglziDERbnDDVBwo3dA1gP7kFrk8XheiSUUapZ NkbOhltbLCTD8EQTwa0sP31445QGvM286oiPXgG67apsPo97xMA4P9HlLkSS5rWfyxOA f5MW7384YqH7iwGBK6eUD40LT+FJRLcCl54B7+YeKZghqRmcY9mZe1fmtJ/bhxsa5PBX Ls+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:user-agent:references:message-id:in-reply-to:subject :cc:to:from:date:x-gm-message-state:from:to:cc; bh=mGASevAIQFRUaf7lkUBhnO0qIsdjeqghm4O7cFFh0lY=; b=oM0d3oukbjXfGrS+j+LKuNsPQZpx0nc6FaZjYzU/4ujFw/yYTwP0wqko7mN0aw25RN 0PcqPl/KIeKRTwaEdGhO+GrI/8qPyjxe6HZcKzc1LM8sNwn62stJ+14sgHfVLEjvkFYj HCIjmRhvFedyiJsOWMRY7g9+Sg5DFReWsVUYja8cNXRTnF/huiyeeAWl8Q9zihiNvYhI c3tOhrCyQ3Jmi+WORFXysbWFzOo8u1JVquZagXv7fgBmublc5KcwkNxccMkAKzV8/prz D0OXQGwFLkrqdGBDdSiZ4mPX8nnc4Dub/LBakv2Cr+xrLpfVfBhW94HIjKYXYOKQcCub LjOw== X-Gm-Message-State: ACgBeo1yTh6j7CvvcQhnA30t33HBMhBgStmNP3Gjp8RophrkGA14mn+U KyCuekH65q7UWsQm/1XuYGVEgRCIxdhqjar8 X-Google-Smtp-Source: AA6agR73A/J3V9VdDP20D9+7CrR2Leqkl46FvtJMAhQP7HOsBbhMfZDqA5Qg90UJ6cpKlo5FGdMRsg== X-Received: by 2002:a2e:3902:0:b0:261:b112:1dc0 with SMTP id g2-20020a2e3902000000b00261b1121dc0mr73790lja.211.1660773866023; Wed, 17 Aug 2022 15:04:26 -0700 (PDT) Received: from [192.168.219.3] ([78.8.192.131]) by smtp.gmail.com with ESMTPSA id w28-20020a05651c119c00b00261a7425db8sm246746ljo.61.2022.08.17.15.04.24 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Aug 2022 15:04:25 -0700 (PDT) Date: Wed, 17 Aug 2022 23:04:22 +0100 (BST) From: "Maciej W. Rozycki" To: gdb-patches@sourceware.org cc: Andrew Burgess , Simon Marchi , Tom Tromey , Simon Sobisch Subject: [PATCH v6 4/8] GDB/Python: Make `None' stand for `unlimited' in setting integer parameters In-Reply-To: Message-ID: References: User-Agent: Alpine 2.20 (DEB 67 2015-01-07) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=no 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-List-Received-Date: Wed, 17 Aug 2022 22:04:29 -0000 Similarly to booleans and following the fix for PR python/29217 make `gdb.parameter' accept `None' for `unlimited' with parameters of the PARAM_UINTEGER, PARAM_INTEGER, and PARAM_ZUINTEGER_UNLIMITED types, as `None' is already returned by parameters of the two former types, so one might expect to be able to feed it back. It also makes it possible to avoid the need to know what the internal integer representation is for the special setting of `unlimited'. Expand the testsuite accordingly. --- New change in v6. --- gdb/python/lib/gdb/__init__.py | 9 ++++++--- gdb/python/py-param.c | 10 +++++++--- gdb/testsuite/gdb.python/py-parameter.exp | 21 +++++++++++++++------ 3 files changed, 28 insertions(+), 12 deletions(-) gdb-python-set-var-xinteger-none.diff Index: src/gdb/python/lib/gdb/__init__.py =================================================================== --- src.orig/gdb/python/lib/gdb/__init__.py +++ src/gdb/python/lib/gdb/__init__.py @@ -240,9 +240,12 @@ Return the name of the shared library ho def set_parameter(name, value): """Set the GDB parameter NAME to VALUE.""" - # Handle the specific case of booleans here, because gdb.parameter - # can return them, but they can't be passed to 'set' this way. - if isinstance(value, bool): + # Handle the specific cases of None and booleans here, because + # gdb.parameter can return them, but they can't be passed to 'set' + # this way. + if value is None: + value = "unlimited" + elif isinstance(value, bool): if value: value = "on" else: Index: src/gdb/python/py-param.c =================================================================== --- src.orig/gdb/python/py-param.c +++ src/gdb/python/py-param.c @@ -243,14 +243,18 @@ set_parameter_value (parmpy_object *self long l; int ok; - if (!PyLong_Check (value)) + if (value == Py_None + && (self->type == var_uinteger || self->type == var_integer)) + l = 0; + else if (value == Py_None && self->type == var_zuinteger_unlimited) + l = -1; + else if (!PyLong_Check (value)) { PyErr_SetString (PyExc_RuntimeError, _("The value must be integer.")); return -1; } - - if (! gdb_py_int_as_long (value, &l)) + else if (! gdb_py_int_as_long (value, &l)) return -1; switch (self->type) Index: src/gdb/testsuite/gdb.python/py-parameter.exp =================================================================== --- src.orig/gdb/testsuite/gdb.python/py-parameter.exp +++ src/gdb/testsuite/gdb.python/py-parameter.exp @@ -346,18 +346,21 @@ proc_with_prefix test_gdb_parameter { } "listsize" { set param_get_zero None set param_get_minus_one -1 + set param_get_none None set param_get_unlimited None set param_set_minus_one "" } "print elements" { set param_get_zero None set param_get_minus_one None + set param_get_none None set param_get_unlimited None set param_set_minus_one $param_range_error } "max-completions" { set param_get_zero 0 set param_get_minus_one -1 + set param_get_none -1 set param_get_unlimited -1 set param_set_minus_one "" } @@ -385,6 +388,12 @@ proc_with_prefix test_gdb_parameter { } gdb_test "python print(gdb.parameter('$param'))" \ $param_get_minus_one "test value of -1" + gdb_test_no_output "python gdb.set_parameter('$param', None)" \ + "test set to None" + + gdb_test "python print(gdb.parameter('$param'))" \ + $param_get_none "test value of None" + gdb_test_no_output "python gdb.set_parameter('$param', 'unlimited')" \ "test set to 'unlimited'" @@ -425,19 +434,19 @@ proc_with_prefix test_integer_parameter set param_get_zero None set param_get_minus_one None set param_get_minus_five 1 - set param_get_none 5 + set param_get_none None set param_set_minus_one $param_range_error set param_set_minus_five $param_range_error - set param_set_none $param_integer_error + set param_set_none "" } PARAM_INTEGER { set param_get_zero None set param_get_minus_one -1 set param_get_minus_five -5 - set param_get_none 5 + set param_get_none None set param_set_minus_one -1 set param_set_minus_five -5 - set param_set_none $param_integer_error + set param_set_none "" } PARAM_ZINTEGER { set param_get_zero 0 @@ -461,10 +470,10 @@ proc_with_prefix test_integer_parameter set param_get_zero 0 set param_get_minus_one -1 set param_get_minus_five 1 - set param_get_none 5 + set param_get_none -1 set param_set_minus_one "" set param_set_minus_five $param_range_error - set param_set_none $param_integer_error + set param_set_none "" } default { error "invalid kind: $kind"