GDB/Python: Make None' stand for unlimited' in setting integer parameters

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.

Approved-By: Simon Marchi <simon.marchi@polymtl.ca>
This commit is contained in:
Maciej W. Rozycki 2022-10-21 08:54:18 +01:00
parent e7e1f20345
commit c506be7d9b
3 changed files with 28 additions and 12 deletions

View file

@ -235,9 +235,12 @@ def find_pc_line(pc):
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:

View file

@ -243,14 +243,18 @@ set_parameter_value (parmpy_object *self, PyObject *value)
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)

View file

@ -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"