Imported Upstream version 7.9
[platform/upstream/gdb.git] / gdb / python / py-function.c
index 59ff65c..1513d8d 100644 (file)
@@ -1,6 +1,6 @@
 /* Convenience functions implemented in Python.
 
-   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -20,7 +20,6 @@
 
 #include "defs.h"
 #include "value.h"
-#include "exceptions.h"
 #include "python-internal.h"
 #include "charset.h"
 #include "gdbcmd.h"
@@ -29,7 +28,8 @@
 #include "expression.h"
 #include "language.h"
 
-static PyTypeObject fnpy_object_type;
+static PyTypeObject fnpy_object_type
+    CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("PyObject");
 
 \f
 
@@ -38,7 +38,7 @@ convert_values_to_python (int argc, struct value **argv)
 {
   int i;
   PyObject *result = PyTuple_New (argc);
-  
+
   if (! result)
     return NULL;
 
@@ -174,14 +174,20 @@ fnpy_init (PyObject *self, PyObject *args, PyObject *kwds)
   if (PyObject_HasAttrString (self, "__doc__"))
     {
       PyObject *ds_obj = PyObject_GetAttrString (self, "__doc__");
-      if (ds_obj && gdbpy_is_string (ds_obj))
+      if (ds_obj != NULL)
        {
-         docstring = python_string_to_host_string (ds_obj);
-         if (docstring == NULL)
+         if (gdbpy_is_string (ds_obj))
            {
-             Py_DECREF (self);
-             return -1;
+             docstring = python_string_to_host_string (ds_obj);
+             if (docstring == NULL)
+               {
+                 Py_DECREF (self);
+                 Py_DECREF (ds_obj);
+                 return -1;
+               }
            }
+
+         Py_DECREF (ds_obj);
        }
     }
   if (! docstring)
@@ -193,23 +199,22 @@ fnpy_init (PyObject *self, PyObject *args, PyObject *kwds)
 
 /* Initialize internal function support.  */
 
-void
+int
 gdbpy_initialize_functions (void)
 {
   fnpy_object_type.tp_new = PyType_GenericNew;
   if (PyType_Ready (&fnpy_object_type) < 0)
-    return;
+    return -1;
 
-  Py_INCREF (&fnpy_object_type);
-  PyModule_AddObject (gdb_module, "Function", (PyObject *) &fnpy_object_type);
+  return gdb_pymodule_addobject (gdb_module, "Function",
+                                (PyObject *) &fnpy_object_type);
 }
 
 \f
 
 static PyTypeObject fnpy_object_type =
 {
-  PyObject_HEAD_INIT (NULL)
-  0,                             /*ob_size*/
+  PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.Function",                /*tp_name*/
   sizeof (PyObject),             /*tp_basicsize*/
   0,                             /*tp_itemsize*/