public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: "Maciej W. Rozycki" <macro@embecosm.com>
To: gdb-patches@sourceware.org
Cc: Andrew Burgess <aburgess@redhat.com>,
	 Simon Marchi <simon.marchi@polymtl.ca>,
	Tom Tromey <tom@tromey.com>,  Simon Sobisch <simonsobisch@web.de>
Subject: [PATCH v6 4/8] GDB/Python: Make `None' stand for `unlimited' in setting integer parameters
Date: Wed, 17 Aug 2022 23:04:22 +0100 (BST)	[thread overview]
Message-ID: <alpine.DEB.2.20.2208171725330.10833@tpp.orcam.me.uk> (raw)
In-Reply-To: <alpine.DEB.2.20.2208151502460.10833@tpp.orcam.me.uk>

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"

  parent reply	other threads:[~2022-08-17 22:04 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-17 22:03 [PATCH v6 0/8] gdb: split array and string limiting options Maciej W. Rozycki
2022-08-17 22:03 ` [PATCH v6 1/8] GDB/Guile: Don't assert that an integer value is boolean Maciej W. Rozycki
2022-10-17 13:43   ` Simon Marchi
2022-10-21  7:58     ` Maciej W. Rozycki
2022-10-21 18:44   ` Simon Marchi
2022-10-21 20:54     ` Maciej W. Rozycki
2022-10-22  0:48       ` Simon Marchi
2022-08-17 22:03 ` [PATCH v6 2/8] GDB/doc: Document the Guile `#:unlimited' keyword Maciej W. Rozycki
2022-08-18  6:06   ` Eli Zaretskii
2022-09-01 10:31     ` Maciej W. Rozycki
2022-08-17 22:04 ` [PATCH v6 3/8] GDB/testsuite: Expand Python integer parameter coverage across all types Maciej W. Rozycki
2022-10-17 13:56   ` Simon Marchi
2022-10-21  7:59     ` Maciej W. Rozycki
2022-08-17 22:04 ` Maciej W. Rozycki [this message]
2022-10-17 14:26   ` [PATCH v6 4/8] GDB/Python: Make `None' stand for `unlimited' in setting integer parameters Simon Marchi
2022-10-21  8:03     ` Maciej W. Rozycki
2022-08-17 22:04 ` [PATCH v6 5/8] GDB/Python: Use None for `var_zuinteger_unlimited' value set to `unlimited' Maciej W. Rozycki
2022-08-18  6:08   ` Eli Zaretskii
2022-10-17 15:02   ` Simon Marchi
2022-10-29 15:58     ` Maciej W. Rozycki
2022-10-31 13:00       ` Simon Marchi
2022-10-31 13:31         ` Maciej W. Rozycki
2022-11-01 12:28           ` Maciej W. Rozycki
2022-10-26 11:58   ` Luis Machado
2022-10-29 13:52     ` Maciej W. Rozycki
2022-10-31  8:14       ` Luis Machado
2022-10-31 12:37         ` Luis Machado
2022-10-31 13:08           ` Maciej W. Rozycki
2022-10-31 13:14             ` Luis Machado
2022-10-31 14:05               ` Maciej W. Rozycki
2022-08-17 22:04 ` [PATCH v6 6/8] GDB: Allow arbitrary keywords in integer set commands Maciej W. Rozycki
2022-08-17 22:05 ` [PATCH v6 7/8] GDB: Add a character string limiting option Maciej W. Rozycki
2022-08-17 22:05 ` [PATCH v6 8/8] GDB/testsuite: Expand for character string limiting options Maciej W. Rozycki
2022-08-18  0:07   ` [PATCH v6.1 " Maciej W. Rozycki
2022-09-01 10:32 ` [PING][PATCH v6 0/8] gdb: split array and " Maciej W. Rozycki
2022-09-08  9:37 ` [PING^2][PATCH " Maciej W. Rozycki
2022-09-14 17:43 ` [PING^3][PATCH " Maciej W. Rozycki
2022-09-22 22:07 ` [PING^4][PATCH " Maciej W. Rozycki
2022-09-29  7:09 ` [PING^5][PATCH " Maciej W. Rozycki
2022-09-29  7:12   ` Simon Sobisch
2022-10-06 15:46 ` [PING^6][PATCH " Maciej W. Rozycki
2022-10-12 21:19 ` [PING^7][PATCH " Maciej W. Rozycki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.DEB.2.20.2208171725330.10833@tpp.orcam.me.uk \
    --to=macro@embecosm.com \
    --cc=aburgess@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=simon.marchi@polymtl.ca \
    --cc=simonsobisch@web.de \
    --cc=tom@tromey.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).