| Index: gdb/python/py-param.c
|
| diff --git a/gdb/python/py-param.c b/gdb/python/py-param.c
|
| index 963427e57d2a32cb9d8d4b60da865776c0cc5057..e7671284dc550c6071ee35d25d86bfda59e92358 100644
|
| --- a/gdb/python/py-param.c
|
| +++ b/gdb/python/py-param.c
|
| @@ -1,6 +1,6 @@
|
| /* GDB parameters implemented in Python
|
|
|
| - Copyright (C) 2008-2012 Free Software Foundation, Inc.
|
| + Copyright (C) 2008-2013 Free Software Foundation, Inc.
|
|
|
| This file is part of GDB.
|
|
|
| @@ -89,7 +89,8 @@ struct parmpy_object
|
|
|
| typedef struct parmpy_object parmpy_object;
|
|
|
| -static PyTypeObject parmpy_object_type;
|
| +static PyTypeObject parmpy_object_type
|
| + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("parmpy_object");
|
|
|
| /* Some handy string constants. */
|
| static PyObject *set_doc_cst;
|
| @@ -102,7 +103,11 @@ static PyObject *
|
| get_attr (PyObject *obj, PyObject *attr_name)
|
| {
|
| if (PyString_Check (attr_name)
|
| +#ifdef IS_PY3K
|
| + && ! PyUnicode_CompareWithASCIIString (attr_name, "value"))
|
| +#else
|
| && ! strcmp (PyString_AsString (attr_name), "value"))
|
| +#endif
|
| {
|
| parmpy_object *self = (parmpy_object *) obj;
|
|
|
| @@ -129,7 +134,7 @@ set_parameter_value (parmpy_object *self, PyObject *value)
|
| && (self->type == var_filename
|
| || value != Py_None))
|
| {
|
| - PyErr_SetString (PyExc_RuntimeError,
|
| + PyErr_SetString (PyExc_RuntimeError,
|
| _("String required for filename."));
|
|
|
| return -1;
|
| @@ -162,7 +167,7 @@ set_parameter_value (parmpy_object *self, PyObject *value)
|
|
|
| if (! gdbpy_is_string (value))
|
| {
|
| - PyErr_SetString (PyExc_RuntimeError,
|
| + PyErr_SetString (PyExc_RuntimeError,
|
| _("ENUM arguments must be a string."));
|
| return -1;
|
| }
|
| @@ -187,12 +192,12 @@ set_parameter_value (parmpy_object *self, PyObject *value)
|
| case var_boolean:
|
| if (! PyBool_Check (value))
|
| {
|
| - PyErr_SetString (PyExc_RuntimeError,
|
| + PyErr_SetString (PyExc_RuntimeError,
|
| _("A boolean argument is required."));
|
| return -1;
|
| }
|
| cmp = PyObject_IsTrue (value);
|
| - if (cmp < 0)
|
| + if (cmp < 0)
|
| return -1;
|
| self->value.intval = cmp;
|
| break;
|
| @@ -211,10 +216,10 @@ set_parameter_value (parmpy_object *self, PyObject *value)
|
| {
|
| cmp = PyObject_IsTrue (value);
|
| if (cmp < 0 )
|
| - return -1;
|
| + return -1;
|
| if (cmp == 1)
|
| self->value.autoboolval = AUTO_BOOLEAN_TRUE;
|
| - else
|
| + else
|
| self->value.autoboolval = AUTO_BOOLEAN_FALSE;
|
| }
|
| break;
|
| @@ -228,7 +233,7 @@ set_parameter_value (parmpy_object *self, PyObject *value)
|
|
|
| if (! PyInt_Check (value))
|
| {
|
| - PyErr_SetString (PyExc_RuntimeError,
|
| + PyErr_SetString (PyExc_RuntimeError,
|
| _("The value must be integer."));
|
| return -1;
|
| }
|
| @@ -253,7 +258,7 @@ set_parameter_value (parmpy_object *self, PyObject *value)
|
|
|
| if (! ok)
|
| {
|
| - PyErr_SetString (PyExc_RuntimeError,
|
| + PyErr_SetString (PyExc_RuntimeError,
|
| _("Range exceeded."));
|
| return -1;
|
| }
|
| @@ -263,7 +268,7 @@ set_parameter_value (parmpy_object *self, PyObject *value)
|
| }
|
|
|
| default:
|
| - PyErr_SetString (PyExc_RuntimeError,
|
| + PyErr_SetString (PyExc_RuntimeError,
|
| _("Unhandled type in parameter value."));
|
| return -1;
|
| }
|
| @@ -276,7 +281,11 @@ static int
|
| set_attr (PyObject *obj, PyObject *attr_name, PyObject *val)
|
| {
|
| if (PyString_Check (attr_name)
|
| +#ifdef IS_PY3K
|
| + && ! PyUnicode_CompareWithASCIIString (attr_name, "value"))
|
| +#else
|
| && ! strcmp (PyString_AsString (attr_name), "value"))
|
| +#endif
|
| {
|
| if (!val)
|
| {
|
| @@ -365,8 +374,6 @@ get_set_value (char *args, int from_tty,
|
| if (! set_doc_func)
|
| goto error;
|
|
|
| - make_cleanup_py_decref (set_doc_func);
|
| -
|
| if (PyObject_HasAttr (obj, set_doc_func))
|
| {
|
| set_doc_string = call_doc_function (obj, set_doc_func, NULL);
|
| @@ -384,10 +391,12 @@ get_set_value (char *args, int from_tty,
|
| make_cleanup (xfree, set_doc_string);
|
| fprintf_filtered (gdb_stdout, "%s\n", set_doc_string);
|
|
|
| + Py_XDECREF (set_doc_func);
|
| do_cleanups (cleanup);
|
| return;
|
|
|
| error:
|
| + Py_XDECREF (set_doc_func);
|
| gdbpy_print_stack ();
|
| do_cleanups (cleanup);
|
| return;
|
| @@ -413,8 +422,6 @@ get_show_value (struct ui_file *file, int from_tty,
|
| if (! show_doc_func)
|
| goto error;
|
|
|
| - make_cleanup_py_decref (show_doc_func);
|
| -
|
| if (PyObject_HasAttr (obj, show_doc_func))
|
| {
|
| PyObject *val_obj = PyString_FromString (value);
|
| @@ -422,9 +429,8 @@ get_show_value (struct ui_file *file, int from_tty,
|
| if (! val_obj)
|
| goto error;
|
|
|
| - make_cleanup_py_decref (val_obj);
|
| -
|
| show_doc_string = call_doc_function (obj, show_doc_func, val_obj);
|
| + Py_DECREF (val_obj);
|
| if (! show_doc_string)
|
| goto error;
|
|
|
| @@ -442,10 +448,12 @@ get_show_value (struct ui_file *file, int from_tty,
|
| fprintf_filtered (file, "%s %s\n", show_doc_string, value);
|
| }
|
|
|
| + Py_XDECREF (show_doc_func);
|
| do_cleanups (cleanup);
|
| return;
|
|
|
| error:
|
| + Py_XDECREF (show_doc_func);
|
| gdbpy_print_stack ();
|
| do_cleanups (cleanup);
|
| return;
|
| @@ -462,7 +470,7 @@ add_setshow_generic (int parmclass, enum command_class cmdclass,
|
| struct cmd_list_element **show_list)
|
| {
|
| struct cmd_list_element *param = NULL;
|
| - char *tmp_name = NULL;
|
| + const char *tmp_name = NULL;
|
|
|
| switch (parmclass)
|
| {
|
| @@ -572,7 +580,7 @@ compute_enum_values (parmpy_object *self, PyObject *enum_values)
|
|
|
| if (! PySequence_Check (enum_values))
|
| {
|
| - PyErr_SetString (PyExc_RuntimeError,
|
| + PyErr_SetString (PyExc_RuntimeError,
|
| _("The enumeration is not a sequence."));
|
| return 0;
|
| }
|
| @@ -582,7 +590,7 @@ compute_enum_values (parmpy_object *self, PyObject *enum_values)
|
| return 0;
|
| if (size == 0)
|
| {
|
| - PyErr_SetString (PyExc_RuntimeError,
|
| + PyErr_SetString (PyExc_RuntimeError,
|
| _("The enumeration is empty."));
|
| return 0;
|
| }
|
| @@ -602,12 +610,14 @@ compute_enum_values (parmpy_object *self, PyObject *enum_values)
|
| }
|
| if (! gdbpy_is_string (item))
|
| {
|
| + Py_DECREF (item);
|
| do_cleanups (back_to);
|
| - PyErr_SetString (PyExc_RuntimeError,
|
| + PyErr_SetString (PyExc_RuntimeError,
|
| _("The enumeration item not a string."));
|
| return 0;
|
| }
|
| self->enumeration[i] = python_string_to_host_string (item);
|
| + Py_DECREF (item);
|
| if (self->enumeration[i] == NULL)
|
| {
|
| do_cleanups (back_to);
|
| @@ -740,41 +750,39 @@ parmpy_init (PyObject *self, PyObject *args, PyObject *kwds)
|
|
|
|
|
| /* Initialize the 'parameters' module. */
|
| -void
|
| +int
|
| gdbpy_initialize_parameters (void)
|
| {
|
| int i;
|
|
|
| parmpy_object_type.tp_new = PyType_GenericNew;
|
| if (PyType_Ready (&parmpy_object_type) < 0)
|
| - return;
|
| + return -1;
|
|
|
| set_doc_cst = PyString_FromString ("set_doc");
|
| if (! set_doc_cst)
|
| - return;
|
| + return -1;
|
| show_doc_cst = PyString_FromString ("show_doc");
|
| if (! show_doc_cst)
|
| - return;
|
| + return -1;
|
|
|
| for (i = 0; parm_constants[i].name; ++i)
|
| {
|
| if (PyModule_AddIntConstant (gdb_module,
|
| parm_constants[i].name,
|
| parm_constants[i].value) < 0)
|
| - return;
|
| + return -1;
|
| }
|
|
|
| - Py_INCREF (&parmpy_object_type);
|
| - PyModule_AddObject (gdb_module, "Parameter",
|
| - (PyObject *) &parmpy_object_type);
|
| + return gdb_pymodule_addobject (gdb_module, "Parameter",
|
| + (PyObject *) &parmpy_object_type);
|
| }
|
|
|
|
|
|
|
| static PyTypeObject parmpy_object_type =
|
| {
|
| - PyObject_HEAD_INIT (NULL)
|
| - 0, /*ob_size*/
|
| + PyVarObject_HEAD_INIT (NULL, 0)
|
| "gdb.Parameter", /*tp_name*/
|
| sizeof (parmpy_object), /*tp_basicsize*/
|
| 0, /*tp_itemsize*/
|
|
|