aboutsummaryrefslogtreecommitdiff
path: root/gdb/python/python.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/python/python.c')
-rw-r--r--gdb/python/python.c56
1 files changed, 37 insertions, 19 deletions
diff --git a/gdb/python/python.c b/gdb/python/python.c
index 9d55811..54623f4 100644
--- a/gdb/python/python.c
+++ b/gdb/python/python.c
@@ -504,27 +504,45 @@ gdbpy_parameter_value (const setting &var)
Py_RETURN_NONE;
}
- case var_integer:
- if (var.get<int> () == INT_MAX)
- Py_RETURN_NONE;
- /* Fall through. */
- case var_zinteger:
- case var_zuinteger_unlimited:
- return gdb_py_object_from_longest (var.get<int> ()).release ();
-
case var_uinteger:
+ case var_integer:
+ case var_pinteger:
{
- unsigned int val = var.get<unsigned int> ();
-
- if (val == UINT_MAX)
- Py_RETURN_NONE;
- return gdb_py_object_from_ulongest (val).release ();
- }
-
- case var_zuinteger:
- {
- unsigned int val = var.get<unsigned int> ();
- return gdb_py_object_from_ulongest (val).release ();
+ LONGEST value
+ = (var.type () == var_uinteger
+ ? static_cast<LONGEST> (var.get<unsigned int> ())
+ : static_cast<LONGEST> (var.get<int> ()));
+
+ if (var.extra_literals () != nullptr)
+ for (const literal_def *l = var.extra_literals ();
+ l->literal != nullptr;
+ l++)
+ if (value == l->use)
+ {
+ if (strcmp (l->literal, "unlimited") == 0)
+ {
+ /* Compatibility hack for API brokenness. */
+ if (var.type () == var_pinteger
+ && l->val.has_value ()
+ && *l->val == -1)
+ value = -1;
+ else
+ Py_RETURN_NONE;
+ }
+ else if (l->val.has_value ())
+ value = *l->val;
+ else
+ return host_string_to_python_string (l->literal).release ();
+ }
+
+ if (var.type () == var_uinteger)
+ return
+ gdb_py_object_from_ulongest
+ (static_cast<unsigned int> (value)).release ();
+ else
+ return
+ gdb_py_object_from_longest
+ (static_cast<int> (value)).release ();
}
}