103 else if (var_type_uses<auto_boolean> (s->
type))
112 gdb_assert_not_reached (
"unhandled var type");
128 if (PyUnicode_Check (attr_name)
129 && ! PyUnicode_CompareWithASCIIString (attr_name,
"value"))
136 return PyObject_GenericGetAttr (obj, attr_name);
154 ||
value != Py_None))
156 PyErr_SetString (PyExc_RuntimeError,
157 _(
"String required for filename."));
161 if (
value == Py_None)
165 gdb::unique_xmalloc_ptr<char>
180 PyErr_SetString (PyExc_RuntimeError,
181 _(
"ENUM arguments must be a string."));
185 gdb::unique_xmalloc_ptr<char>
194 PyErr_SetString (PyExc_RuntimeError,
195 _(
"The value must be member of an enumeration."));
203 if (! PyBool_Check (
value))
205 PyErr_SetString (PyExc_RuntimeError,
206 _(
"A boolean argument is required."));
209 cmp = PyObject_IsTrue (
value);
216 if (! PyBool_Check (
value) &&
value != Py_None)
218 PyErr_SetString (PyExc_RuntimeError,
219 _(
"A boolean or None is required"));
223 if (
value == Py_None)
227 cmp = PyObject_IsTrue (
value);
251 else if (!PyLong_Check (
value))
253 PyErr_SetString (PyExc_RuntimeError,
254 _(
"The value must be integer."));
271 ok = (l >= -1 && l <=
INT_MAX);
285 gdb_assert_not_reached (
"unknown var_ constant");
290 PyErr_SetString (PyExc_RuntimeError,
291 _(
"Range exceeded."));
303 PyErr_SetString (PyExc_RuntimeError,
304 _(
"Unhandled type in parameter value."));
313set_attr (PyObject *obj, PyObject *attr_name, PyObject *val)
315 if (PyUnicode_Check (attr_name)
316 && ! PyUnicode_CompareWithASCIIString (attr_name,
"value"))
320 PyErr_SetString (PyExc_RuntimeError,
321 _(
"Cannot delete a parameter's value."));
327 return PyObject_GenericSetAttr (obj, attr_name, val);
362static gdb::unique_xmalloc_ptr<char>
364 const char *cmd_name)
366 gdb::unique_xmalloc_ptr<char> result;
368 PyObject *attr =
nullptr;
381 gdb_assert (attr !=
nullptr);
383 if (PyObject_HasAttr (
object, attr))
385 gdbpy_ref<> ds_obj (PyObject_GetAttr (
object, attr));
397 if (result ==
nullptr)
400 result.reset (xstrdup (_(
"This command is not documented.")));
404 result = xstrprintf (_(
"Show the current value of '%s'."),
407 result = xstrprintf (_(
"Set the current value of '%s'."),
418static gdb::unique_xmalloc_ptr<char>
421 gdb::unique_xmalloc_ptr<char> data;
422 gdbpy_ref<> result (PyObject_CallMethodObjArgs (obj, method, arg, NULL));
435 PyErr_SetString (PyExc_RuntimeError,
436 _(
"Parameter must return a string value."));
452 PyObject *obj = (PyObject *) c->
context ();
453 gdb::unique_xmalloc_ptr<char> set_doc_string;
456 gdbpy_ref<> set_doc_func (PyUnicode_FromString (
"get_set_string"));
458 if (set_doc_func == NULL)
464 if (PyObject_HasAttr (obj, set_doc_func.get ()))
467 if (! set_doc_string)
471 const char *str = set_doc_string.get ();
472 if (str !=
nullptr && str[0] !=
'\0')
487 PyObject *obj = (PyObject *) c->
context ();
488 gdb::unique_xmalloc_ptr<char> show_doc_string;
491 gdbpy_ref<> show_doc_func (PyUnicode_FromString (
"get_show_string"));
493 if (show_doc_func == NULL)
499 if (PyObject_HasAttr (obj, show_doc_func.get ()))
511 if (! show_doc_string)
517 gdb_printf (file,
"%s\n", show_doc_string.get ());
528 gdb_printf (file, _(
"The current value of '%s' is \"%s\".\n"),
529 cmd_path.c_str (),
value);
538 gdb::unique_xmalloc_ptr<char> cmd_name,
540 const char *set_doc,
const char *show_doc,
541 const char *help_doc,
560 set_doc, show_doc, help_doc,
562 set_list, show_list);
589 set_doc, show_doc, help_doc,
591 set_list, show_list);
597 set_doc, show_doc, help_doc,
645 gdb_assert_not_reached (
"Unhandled parameter class.");
665 PyErr_SetString (PyExc_RuntimeError,
666 _(
"An enumeration is required for PARAM_ENUM."));
670 if (! PySequence_Check (enum_values))
672 PyErr_SetString (PyExc_RuntimeError,
673 _(
"The enumeration is not a sequence."));
677 size = PySequence_Size (enum_values);
682 PyErr_SetString (PyExc_RuntimeError,
683 _(
"The enumeration is empty."));
687 gdb_argv holder (XCNEWVEC (
char *,
size + 1));
688 char **enumeration = holder.get ();
690 for (i = 0; i <
size; ++i)
692 gdbpy_ref<> item (PySequence_GetItem (enum_values, i));
698 PyErr_SetString (PyExc_RuntimeError,
699 _(
"The enumeration item not a string."));
703 if (enumeration[i] == NULL)
707 self->
enumeration =
const_cast<const char**
> (holder.release ());
739 gdb::unique_xmalloc_ptr<char> set_doc, show_doc, doc;
740 int parmclass, cmdtype;
741 PyObject *enum_values = NULL;
744 if (! PyArg_ParseTuple (args,
"sii|O", &
name, &cmdtype, &parmclass,
755 PyErr_Format (PyExc_RuntimeError, _(
"Invalid command class argument."));
767 PyErr_SetString (PyExc_RuntimeError,
768 _(
"Invalid parameter class argument."));
772 if (enum_values && parmclass !=
var_enum)
774 PyErr_SetString (PyExc_RuntimeError,
775 _(
"Only PARAM_ENUM accepts a fourth argument."));
791 gdb::unique_xmalloc_ptr<char> cmd_name
793 if (cmd_name ==
nullptr)
797 if (cmd_name ==
nullptr)
809 std::move (cmd_name), obj,
810 set_doc.get (), show_doc.get (),
811 doc.get (), set_list, show_list);
813 catch (
const gdb_exception &except)
867 PyVarObject_HEAD_INIT (NULL, 0)
886 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
887 "GDB parameter object",
static std::vector< ada_component_up > components
struct cmd_list_element * showlist
struct cmd_list_element * setlist
set_show_commands add_setshow_filename_cmd(const char *name, enum command_class theclass, std::string *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
set_show_commands add_setshow_uinteger_cmd(const char *name, enum command_class theclass, unsigned int *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
set_show_commands add_setshow_zinteger_cmd(const char *name, enum command_class theclass, int *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
set_show_commands add_setshow_optional_filename_cmd(const char *name, enum command_class theclass, std::string *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
set_show_commands add_setshow_string_cmd(const char *name, enum command_class theclass, std::string *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
set_show_commands add_setshow_zuinteger_unlimited_cmd(const char *name, enum command_class theclass, int *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
set_show_commands add_setshow_integer_cmd(const char *name, enum command_class theclass, int *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
set_show_commands add_setshow_enum_cmd(const char *name, enum command_class theclass, const char *const *enumlist, const char **var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
set_show_commands add_setshow_boolean_cmd(const char *name, enum command_class theclass, bool *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
set_show_commands add_setshow_string_noescape_cmd(const char *name, enum command_class theclass, std::string *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
set_show_commands add_setshow_auto_boolean_cmd(const char *name, enum command_class theclass, enum auto_boolean *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
set_show_commands add_setshow_zuinteger_cmd(const char *name, enum command_class theclass, unsigned int *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
bool var_type_uses< bool >(var_types t)
@ var_zuinteger_unlimited
bool var_type_uses< std::string >(var_types t)
bool var_type_uses< int >(var_types t)
bool var_type_uses< const char * >(var_types t)
bool var_type_uses< unsigned int >(var_types t)
gdb::unique_xmalloc_ptr< char > gdbpy_parse_command_name(const char *name, struct cmd_list_element ***base_list, struct cmd_list_element **start_list)
static std::string full_cmd_name_without_first_prefix(struct cmd_list_element *c)
static void get_set_value(const char *args, int from_tty, struct cmd_list_element *c)
static PyObject * show_doc_cst
PyTypeObject parmpy_object_type
static PyObject * get_attr(PyObject *obj, PyObject *attr_name)
static PyObject * set_doc_cst
static int set_parameter_value(parmpy_object *self, PyObject *value)
int gdbpy_initialize_parameters(void)
static void get_show_value(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
static struct @151 parm_constants[]
static setting make_setting(parmpy_object *s)
static int compute_enum_values(parmpy_object *self, PyObject *enum_values)
static void add_setshow_generic(int parmclass, enum command_class cmdclass, gdb::unique_xmalloc_ptr< char > cmd_name, parmpy_object *self, const char *set_doc, const char *show_doc, const char *help_doc, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
static int set_attr(PyObject *obj, PyObject *attr_name, PyObject *val)
static gdb::unique_xmalloc_ptr< char > call_doc_function(PyObject *obj, PyObject *method, PyObject *arg)
static void parmpy_dealloc(PyObject *obj)
static int parmpy_init(PyObject *self, PyObject *args, PyObject *kwds)
gdb::ref_ptr< T, gdbpy_ref_policy< T > > gdbpy_ref
gdb::unique_xmalloc_ptr< char > gdbpy_fix_doc_string_indentation(gdb::unique_xmalloc_ptr< char > doc)
void gdbpy_convert_exception(const struct gdb_exception &exception)
int gdb_py_int_as_long(PyObject *obj, long *result)
int gdb_pymodule_addobject(PyObject *module, const char *name, PyObject *object)
gdb::unique_xmalloc_ptr< char > python_string_to_host_string(PyObject *obj)
void gdbpy_handle_exception()
int gdbpy_is_string(PyObject *obj)
void gdbpy_print_stack(void)
#define CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF(ARG)
PyObject * gdbpy_parameter_value(const setting &var)
static char * get_doc_string(void)
std::vector< std::string > command_components() const
void set_context(void *context)
PyObject_HEAD enum var_types type
const char ** enumeration
union parmpy_variable value
enum auto_boolean autoboolval
void gdb_printf(struct ui_file *stream, const char *format,...)