This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] HACK externify static variables in python support for -Wc++-compat


This is an approach to one of the non-trivial cases for C++ conversion:
C++ (sensibly IMHO) does not allow a static variable to be defined more
than once (treating the first as a declaration) in a TU.


This would probably be better done by moving the definitiion up,
which we might be able to get away with in gdb's code, since it *is*
legal to forward-declare a static *function*.

In general, it might not work, if there are two statics trying to take
each other's addresses ...

That said, it's pretty suspicious to be defining a static variable more
than once in a TU even in C.


This exists in repo form at https://github.com/o11c/binutils-gdb/tree/c++
---
 gdb/python/py-arch.c             |  7 +++++--
 gdb/python/py-block.c            |  7 +++++--
 gdb/python/py-bpevent.c          |  7 +++++--
 gdb/python/py-cmd.c              |  7 +++++--
 gdb/python/py-continueevent.c    |  7 +++++--
 gdb/python/py-evtregistry.c      |  7 +++++--
 gdb/python/py-exitedevent.c      |  7 +++++--
 gdb/python/py-finishbreakpoint.c |  7 +++++--
 gdb/python/py-function.c         |  7 +++++--
 gdb/python/py-inferior.c         | 11 +++++++----
 gdb/python/py-infthread.c        |  7 +++++--
 gdb/python/py-lazy-string.c      |  7 +++++--
 gdb/python/py-linetable.c        | 15 +++++++++------
 gdb/python/py-newobjfileevent.c  |  7 +++++--
 gdb/python/py-objfile.c          |  7 +++++--
 gdb/python/py-param.c            |  7 +++++--
 gdb/python/py-progspace.c        |  7 +++++--
 gdb/python/py-signalevent.c      |  7 +++++--
 gdb/python/py-symtab.c           | 11 +++++++----
 gdb/python/py-type.c             | 15 +++++++++------
 20 files changed, 112 insertions(+), 52 deletions(-)

diff --git a/gdb/python/py-arch.c b/gdb/python/py-arch.c
index a351c12..7583186 100644
--- a/gdb/python/py-arch.c
+++ b/gdb/python/py-arch.c
@@ -23,6 +23,9 @@
 #include "disasm.h"
 #include "python-internal.h"
 
+#define static_decl extern
+#define static_def /*static*/
+
 typedef struct arch_object_type_object {
   PyObject_HEAD
   struct gdbarch *gdbarch;
@@ -42,7 +45,7 @@ static struct gdbarch_data *arch_object_data = NULL;
       }								\
   } while (0)
 
-static PyTypeObject arch_object_type
+static_decl PyTypeObject arch_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("arch_object");
 
 /* Associates an arch_object with GDBARCH as gdbarch_data via the gdbarch
@@ -281,7 +284,7 @@ END_PC." },
   {NULL}  /* Sentinel */
 };
 
-static PyTypeObject arch_object_type = {
+static_def PyTypeObject arch_object_type = {
   PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.Architecture",                 /* tp_name */
   sizeof (arch_object),               /* tp_basicsize */
diff --git a/gdb/python/py-block.c b/gdb/python/py-block.c
index 73b5565..d05470e 100644
--- a/gdb/python/py-block.c
+++ b/gdb/python/py-block.c
@@ -25,6 +25,9 @@
 #include "objfiles.h"
 #include "symtab.h"
 
+#define static_decl extern
+#define static_def /*static*/
+
 typedef struct blpy_block_object {
   PyObject_HEAD
   /* The GDB block structure that represents a frame's code block.  */
@@ -78,7 +81,7 @@ typedef struct {
       }									\
   } while (0)
 
-static PyTypeObject block_syms_iterator_object_type
+static_decl PyTypeObject block_syms_iterator_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("block_syms_iterator_object");
 static const struct objfile_data *blpy_objfile_data_key;
 
@@ -517,7 +520,7 @@ Return true if this block iterator is valid, false if not." },
   {NULL}  /* Sentinel */
 };
 
-static PyTypeObject block_syms_iterator_object_type = {
+static_def PyTypeObject block_syms_iterator_object_type = {
   PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.BlockIterator",		  /*tp_name*/
   sizeof (block_syms_iterator_object),	      /*tp_basicsize*/
diff --git a/gdb/python/py-bpevent.c b/gdb/python/py-bpevent.c
index 5238ad8..3dd29b7 100644
--- a/gdb/python/py-bpevent.c
+++ b/gdb/python/py-bpevent.c
@@ -20,7 +20,10 @@
 #include "defs.h"
 #include "py-stopevent.h"
 
-static PyTypeObject breakpoint_event_object_type
+#define static_decl extern
+#define static_def /*static*/
+
+static_decl PyTypeObject breakpoint_event_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object");
 
 /* Create and initialize a BreakpointEvent object.  This acquires new
@@ -56,4 +59,4 @@ GDBPY_NEW_EVENT_TYPE (breakpoint,
                       "BreakpointEvent",
                       "GDB breakpoint stop event object",
                       stop_event_object_type,
-                      static);
+                      static_def);
diff --git a/gdb/python/py-cmd.c b/gdb/python/py-cmd.c
index 839de8f..51ab0c4 100644
--- a/gdb/python/py-cmd.c
+++ b/gdb/python/py-cmd.c
@@ -29,6 +29,9 @@
 #include "completer.h"
 #include "language.h"
 
+#define static_decl extern
+#define static_def /*static*/
+
 /* Struct representing built-in completion types.  */
 struct cmdpy_completer
 {
@@ -69,7 +72,7 @@ struct cmdpy_object
 
 typedef struct cmdpy_object cmdpy_object;
 
-static PyTypeObject cmdpy_object_type
+static_decl PyTypeObject cmdpy_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("cmdpy_object");
 
 /* Constants used by this module.  */
@@ -625,7 +628,7 @@ static PyMethodDef cmdpy_object_methods[] =
   { 0 }
 };
 
-static PyTypeObject cmdpy_object_type =
+static_def PyTypeObject cmdpy_object_type =
 {
   PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.Command",		  /*tp_name*/
diff --git a/gdb/python/py-continueevent.c b/gdb/python/py-continueevent.c
index c1f8f65..0b4c8c9 100644
--- a/gdb/python/py-continueevent.c
+++ b/gdb/python/py-continueevent.c
@@ -20,7 +20,10 @@
 #include "defs.h"
 #include "py-event.h"
 
-static PyTypeObject continue_event_object_type
+#define static_decl extern
+#define static_def /*static*/
+
+static_decl PyTypeObject continue_event_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object");
 
 static PyObject *
@@ -52,4 +55,4 @@ GDBPY_NEW_EVENT_TYPE (continue,
                       "ContinueEvent",
                       "GDB continue event object",
                       thread_event_object_type,
-                      static);
+                      static_def);
diff --git a/gdb/python/py-evtregistry.c b/gdb/python/py-evtregistry.c
index 0eeb853..4a29af7 100644
--- a/gdb/python/py-evtregistry.c
+++ b/gdb/python/py-evtregistry.c
@@ -21,9 +21,12 @@
 #include "command.h"
 #include "py-events.h"
 
+#define static_decl extern
+#define static_def /*static*/
+
 events_object gdb_py_events;
 
-static PyTypeObject eventregistry_object_type
+static_decl PyTypeObject eventregistry_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("eventregistry_object");
 
 /* Implementation of EventRegistry.connect () -> NULL.
@@ -132,7 +135,7 @@ static PyMethodDef eventregistry_object_methods[] =
   { NULL } /* Sentinel.  */
 };
 
-static PyTypeObject eventregistry_object_type =
+static_def PyTypeObject eventregistry_object_type =
 {
   PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.EventRegistry",                        /* tp_name */
diff --git a/gdb/python/py-exitedevent.c b/gdb/python/py-exitedevent.c
index 49c3100..106d9d5 100644
--- a/gdb/python/py-exitedevent.c
+++ b/gdb/python/py-exitedevent.c
@@ -20,7 +20,10 @@
 #include "defs.h"
 #include "py-event.h"
 
-static PyTypeObject exited_event_object_type
+#define static_decl extern
+#define static_def /*static*/
+
+static_decl PyTypeObject exited_event_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object");
 
 static PyObject *
@@ -89,4 +92,4 @@ GDBPY_NEW_EVENT_TYPE (exited,
                       "ExitedEvent",
                       "GDB exited event object",
                       event_object_type,
-                      static);
+                      static_def);
diff --git a/gdb/python/py-finishbreakpoint.c b/gdb/python/py-finishbreakpoint.c
index 394ac1e..156837a 100644
--- a/gdb/python/py-finishbreakpoint.c
+++ b/gdb/python/py-finishbreakpoint.c
@@ -31,6 +31,9 @@
 #include "inferior.h"
 #include "block.h"
 
+#define static_decl extern
+#define static_def /*static*/
+
 /* Function that is called when a Python finish bp is found out of scope.  */
 static char * const outofscope_func = "out_of_scope";
 
@@ -53,7 +56,7 @@ struct finish_breakpoint_object
   PyObject *return_value;
 };
 
-static PyTypeObject finish_breakpoint_object_type
+static_decl PyTypeObject finish_breakpoint_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("finish_breakpoint_object");
 
 /* Python function to get the 'return_value' attribute of
@@ -430,7 +433,7 @@ None otherwise.", NULL },
     { NULL }  /* Sentinel.  */
 };
 
-static PyTypeObject finish_breakpoint_object_type =
+static_def PyTypeObject finish_breakpoint_object_type =
 {
   PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.FinishBreakpoint",         /*tp_name*/
diff --git a/gdb/python/py-function.c b/gdb/python/py-function.c
index 843ad30..3e22281 100644
--- a/gdb/python/py-function.c
+++ b/gdb/python/py-function.c
@@ -29,7 +29,10 @@
 #include "expression.h"
 #include "language.h"
 
-static PyTypeObject fnpy_object_type
+#define static_decl extern
+#define static_def /*static*/
+
+static_decl PyTypeObject fnpy_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("PyObject");
 
 
@@ -213,7 +216,7 @@ gdbpy_initialize_functions (void)
 
 
 
-static PyTypeObject fnpy_object_type =
+static_def PyTypeObject fnpy_object_type =
 {
   PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.Function",		  /*tp_name*/
diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c
index e03ef6c..f52c3fa 100644
--- a/gdb/python/py-inferior.c
+++ b/gdb/python/py-inferior.c
@@ -31,6 +31,9 @@
 #include "py-event.h"
 #include "py-stopevent.h"
 
+#define static_decl extern
+#define static_def /*static*/
+
 struct threadlist_entry {
   thread_object *thread_obj;
   struct threadlist_entry *next;
@@ -51,7 +54,7 @@ typedef struct
   int nthreads;
 } inferior_object;
 
-static PyTypeObject inferior_object_type
+static_decl PyTypeObject inferior_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("inferior_object");
 
 static const struct inferior_data *infpy_inf_data_key;
@@ -65,7 +68,7 @@ typedef struct {
   CORE_ADDR length;
 } membuf_object;
 
-static PyTypeObject membuf_object_type
+static_decl PyTypeObject membuf_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("membuf_object");
 
 /* Require that INFERIOR be a valid inferior ID.  */
@@ -837,7 +840,7 @@ Return a long with the address of a match, or None." },
   { NULL }
 };
 
-static PyTypeObject inferior_object_type =
+static_def PyTypeObject inferior_object_type =
 {
   PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.Inferior",		  /* tp_name */
@@ -904,7 +907,7 @@ static PyBufferProcs buffer_procs = {
 };
 #endif	/* IS_PY3K */
 
-static PyTypeObject membuf_object_type = {
+static_def PyTypeObject membuf_object_type = {
   PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.Membuf",			  /*tp_name*/
   sizeof (membuf_object),	  /*tp_basicsize*/
diff --git a/gdb/python/py-infthread.c b/gdb/python/py-infthread.c
index 2b1da22..9dd5035 100644
--- a/gdb/python/py-infthread.c
+++ b/gdb/python/py-infthread.c
@@ -23,7 +23,10 @@
 #include "inferior.h"
 #include "python-internal.h"
 
-static PyTypeObject thread_object_type
+#define static_decl extern
+#define static_def /*static*/
+
+static_decl PyTypeObject thread_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("thread_object");
 
 /* Require that INFERIOR be a valid inferior ID.  */
@@ -299,7 +302,7 @@ Return whether the thread is exited." },
   { NULL }
 };
 
-static PyTypeObject thread_object_type =
+static_def PyTypeObject thread_object_type =
 {
   PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.InferiorThread",		  /*tp_name*/
diff --git a/gdb/python/py-lazy-string.c b/gdb/python/py-lazy-string.c
index ea193a9..4777426 100644
--- a/gdb/python/py-lazy-string.c
+++ b/gdb/python/py-lazy-string.c
@@ -26,6 +26,9 @@
 #include "language.h"
 #include "gdb_assert.h"
 
+#define static_decl extern
+#define static_def /*static*/
+
 typedef struct {
   PyObject_HEAD
   /*  Holds the address of the lazy string.  */
@@ -47,7 +50,7 @@ typedef struct {
   struct type *type;
 } lazy_string_object;
 
-static PyTypeObject lazy_string_object_type
+static_decl PyTypeObject lazy_string_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("lazy_string_object");
 
 static PyObject *
@@ -217,7 +220,7 @@ static PyGetSetDef lazy_string_object_getset[] = {
   { NULL }  /* Sentinel */
 };
 
-static PyTypeObject lazy_string_object_type = {
+static_def PyTypeObject lazy_string_object_type = {
   PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.LazyString",	          /*tp_name*/
   sizeof (lazy_string_object),	  /*tp_basicsize*/
diff --git a/gdb/python/py-linetable.c b/gdb/python/py-linetable.c
index e0449a6..ee5c218 100644
--- a/gdb/python/py-linetable.c
+++ b/gdb/python/py-linetable.c
@@ -21,6 +21,9 @@
 #include "python-internal.h"
 #include "exceptions.h"
 
+#define static_decl extern
+#define static_def /*static*/
+
 typedef struct {
   PyObject_HEAD
   /* The line table source line.  */
@@ -29,7 +32,7 @@ typedef struct {
   CORE_ADDR pc;
 } linetable_entry_object;
 
-static PyTypeObject linetable_entry_object_type
+static_decl PyTypeObject linetable_entry_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("linetable_entry_object");
 
 typedef struct {
@@ -40,7 +43,7 @@ typedef struct {
   PyObject *symtab;
 } linetable_object;
 
-static PyTypeObject linetable_object_type
+static_decl PyTypeObject linetable_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("linetable_object");
 
 typedef struct {
@@ -53,7 +56,7 @@ typedef struct {
   PyObject *source;
 } ltpy_iterator_object;
 
-static PyTypeObject ltpy_iterator_object_type
+static_decl PyTypeObject ltpy_iterator_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("ltpy_iterator_object");
 
 /* Internal helper function to extract gdb.Symtab from a gdb.Linetable
@@ -494,7 +497,7 @@ Return True if this Linetable is valid, False if not." },
   {NULL}  /* Sentinel */
 };
 
-static PyTypeObject linetable_object_type = {
+static_def PyTypeObject linetable_object_type = {
   PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.LineTable",	          /*tp_name*/
   sizeof (linetable_object),	  /*tp_basicsize*/
@@ -541,7 +544,7 @@ Return True if this Linetable iterator is valid, False if not." },
   {NULL}  /* Sentinel */
 };
 
-static PyTypeObject ltpy_iterator_object_type = {
+static_def PyTypeObject ltpy_iterator_object_type = {
   PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.LineTableIterator",		  /*tp_name*/
   sizeof (ltpy_iterator_object),  /*tp_basicsize*/
@@ -581,7 +584,7 @@ static PyGetSetDef linetable_entry_object_getset[] = {
   { NULL }  /* Sentinel */
 };
 
-static PyTypeObject linetable_entry_object_type = {
+static_def PyTypeObject linetable_entry_object_type = {
   PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.LineTableEntry",	          /*tp_name*/
   sizeof (linetable_entry_object), /*tp_basicsize*/
diff --git a/gdb/python/py-newobjfileevent.c b/gdb/python/py-newobjfileevent.c
index d781e92..772a291 100644
--- a/gdb/python/py-newobjfileevent.c
+++ b/gdb/python/py-newobjfileevent.c
@@ -20,7 +20,10 @@
 #include "defs.h"
 #include "py-event.h"
 
-static PyTypeObject new_objfile_event_object_type
+#define static_decl extern
+#define static_def /*static*/
+
+static_decl PyTypeObject new_objfile_event_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object");
 
 static PyObject *
@@ -71,4 +74,4 @@ GDBPY_NEW_EVENT_TYPE (new_objfile,
                       "NewObjFileEvent",
                       "GDB new object file event object",
                       event_object_type,
-                      static);
+                      static_def);
diff --git a/gdb/python/py-objfile.c b/gdb/python/py-objfile.c
index 100a784..ba4afda 100644
--- a/gdb/python/py-objfile.c
+++ b/gdb/python/py-objfile.c
@@ -23,6 +23,9 @@
 #include "objfiles.h"
 #include "language.h"
 
+#define static_decl extern
+#define static_def /*static*/
+
 typedef struct
 {
   PyObject_HEAD
@@ -39,7 +42,7 @@ typedef struct
   PyObject *type_printers;
 } objfile_object;
 
-static PyTypeObject objfile_object_type
+static_decl PyTypeObject objfile_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("objfile_object");
 
 static const struct objfile_data *objfpy_objfile_data_key;
@@ -336,7 +339,7 @@ static PyGetSetDef objfile_getset[] =
   { NULL }
 };
 
-static PyTypeObject objfile_object_type =
+static_def PyTypeObject objfile_object_type =
 {
   PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.Objfile",		  /*tp_name*/
diff --git a/gdb/python/py-param.c b/gdb/python/py-param.c
index 5021f58..ce6b766 100644
--- a/gdb/python/py-param.c
+++ b/gdb/python/py-param.c
@@ -29,6 +29,9 @@
 #include "language.h"
 #include "arch-utils.h"
 
+#define static_decl extern
+#define static_def /*static*/
+
 /* Parameter constants and their values.  */
 struct parm_constant
 {
@@ -89,7 +92,7 @@ struct parmpy_object
 
 typedef struct parmpy_object parmpy_object;
 
-static PyTypeObject parmpy_object_type
+static_decl PyTypeObject parmpy_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("parmpy_object");
 
 /* Some handy string constants.  */
@@ -780,7 +783,7 @@ gdbpy_initialize_parameters (void)
 
 
 
-static PyTypeObject parmpy_object_type =
+static_def PyTypeObject parmpy_object_type =
 {
   PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.Parameter",		  /*tp_name*/
diff --git a/gdb/python/py-progspace.c b/gdb/python/py-progspace.c
index e76d066..49f5612 100644
--- a/gdb/python/py-progspace.c
+++ b/gdb/python/py-progspace.c
@@ -25,6 +25,9 @@
 #include "language.h"
 #include "arch-utils.h"
 
+#define static_decl extern
+#define static_def /*static*/
+
 typedef struct
 {
   PyObject_HEAD
@@ -41,7 +44,7 @@ typedef struct
   PyObject *type_printers;
 } pspace_object;
 
-static PyTypeObject pspace_object_type
+static_decl PyTypeObject pspace_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("pspace_object");
 
 static const struct program_space_data *pspy_pspace_data_key;
@@ -323,7 +326,7 @@ static PyGetSetDef pspace_getset[] =
   { NULL }
 };
 
-static PyTypeObject pspace_object_type =
+static_def PyTypeObject pspace_object_type =
 {
   PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.Progspace",		  /*tp_name*/
diff --git a/gdb/python/py-signalevent.c b/gdb/python/py-signalevent.c
index 1d723f0..348d6e0 100644
--- a/gdb/python/py-signalevent.c
+++ b/gdb/python/py-signalevent.c
@@ -20,7 +20,10 @@
 #include "defs.h"
 #include "py-stopevent.h"
 
-static PyTypeObject signal_event_object_type
+#define static_decl extern
+#define static_def /*static*/
+
+static_decl PyTypeObject signal_event_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object");
 
 PyObject *
@@ -58,4 +61,4 @@ GDBPY_NEW_EVENT_TYPE (signal,
                       "SignalEvent",
                       "GDB signal event object",
                       stop_event_object_type,
-                      static);
+                      static_def);
diff --git a/gdb/python/py-symtab.c b/gdb/python/py-symtab.c
index ab92c8f..7d47e23 100644
--- a/gdb/python/py-symtab.c
+++ b/gdb/python/py-symtab.c
@@ -25,6 +25,9 @@
 #include "objfiles.h"
 #include "block.h"
 
+#define static_decl extern
+#define static_def /*static*/
+
 typedef struct stpy_symtab_object {
   PyObject_HEAD
   /* The GDB Symbol table structure.  */
@@ -37,7 +40,7 @@ typedef struct stpy_symtab_object {
   struct stpy_symtab_object *next;
 } symtab_object;
 
-static PyTypeObject symtab_object_type
+static_decl PyTypeObject symtab_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("symtab_object");
 static const struct objfile_data *stpy_objfile_data_key;
 
@@ -68,7 +71,7 @@ typedef struct salpy_sal_object {
   struct salpy_sal_object *next;
 } sal_object;
 
-static PyTypeObject sal_object_type
+static_decl PyTypeObject sal_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("sal_object");
 static const struct objfile_data *salpy_objfile_data_key;
 
@@ -552,7 +555,7 @@ Return the Linetable associated with this symbol table" },
   {NULL}  /* Sentinel */
 };
 
-static PyTypeObject symtab_object_type = {
+static_def PyTypeObject symtab_object_type = {
   PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.Symtab",			  /*tp_name*/
   sizeof (symtab_object),	  /*tp_basicsize*/
@@ -602,7 +605,7 @@ Return true if this symbol table and line is valid, false if not." },
   {NULL}  /* Sentinel */
 };
 
-static PyTypeObject sal_object_type = {
+static_def PyTypeObject sal_object_type = {
   PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.Symtab_and_line",	  /*tp_name*/
   sizeof (sal_object),		  /*tp_basicsize*/
diff --git a/gdb/python/py-type.c b/gdb/python/py-type.c
index 9509aa3..c79af6d 100644
--- a/gdb/python/py-type.c
+++ b/gdb/python/py-type.c
@@ -30,6 +30,9 @@
 #include "vec.h"
 #include "typeprint.h"
 
+#define static_decl extern
+#define static_def /*static*/
+
 typedef struct pyty_type_object
 {
   PyObject_HEAD
@@ -42,7 +45,7 @@ typedef struct pyty_type_object
   struct pyty_type_object *next;
 } type_object;
 
-static PyTypeObject type_object_type
+static_decl PyTypeObject type_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("type_object");
 
 /* A Field object.  */
@@ -54,7 +57,7 @@ typedef struct pyty_field_object
   PyObject *dict;
 } field_object;
 
-static PyTypeObject field_object_type
+static_decl PyTypeObject field_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("field_object");
 
 /* A type iterator object.  */
@@ -68,7 +71,7 @@ typedef struct {
   struct pyty_type_object *source;
 } typy_iterator_object;
 
-static PyTypeObject type_iterator_object_type
+static_decl PyTypeObject type_iterator_object_type
     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("typy_iterator_object");
 
 /* This is used to initialize various gdb.TYPE_ constants.  */
@@ -1518,7 +1521,7 @@ static PyMappingMethods typy_mapping = {
   NULL				  /* no "set" method */
 };
 
-static PyTypeObject type_object_type =
+static_def PyTypeObject type_object_type =
 {
   PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.Type",			  /*tp_name*/
@@ -1567,7 +1570,7 @@ static PyGetSetDef field_object_getset[] =
   { NULL }
 };
 
-static PyTypeObject field_object_type =
+static_def PyTypeObject field_object_type =
 {
   PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.Field",			  /*tp_name*/
@@ -1609,7 +1612,7 @@ static PyTypeObject field_object_type =
   0,				  /* tp_new */
 };
 
-static PyTypeObject type_iterator_object_type = {
+static_def PyTypeObject type_iterator_object_type = {
   PyVarObject_HEAD_INIT (NULL, 0)
   "gdb.TypeIterator",		  /*tp_name*/
   sizeof (typy_iterator_object),  /*tp_basicsize*/
-- 
1.8.5.1


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]