/* Python interface to symbol tables.
- Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Copyright (C) 2008-2016 Free Software Foundation, Inc.
This file is part of GDB.
struct stpy_symtab_object *next;
} symtab_object;
-static PyTypeObject symtab_object_type
+extern PyTypeObject symtab_object_type
CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("symtab_object");
static const struct objfile_data *stpy_objfile_data_key;
struct salpy_sal_object *next;
} sal_object;
-static PyTypeObject sal_object_type
+extern PyTypeObject sal_object_type
CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("sal_object");
static const struct objfile_data *salpy_objfile_data_key;
STPY_REQUIRE_VALID (self, symtab);
filename = symtab_to_filename_for_display (symtab);
- str_obj = PyString_Decode (filename, strlen (filename),
- host_charset (), NULL);
+ str_obj = host_string_to_python_string (filename);
return str_obj;
}
STPY_REQUIRE_VALID (self, symtab);
- result = objfile_to_objfile_object (symtab->objfile);
+ result = objfile_to_objfile_object (SYMTAB_OBJFILE (symtab));
Py_XINCREF (result);
return result;
}
+/* Getter function for symtab.producer. */
+
+static PyObject *
+stpy_get_producer (PyObject *self, void *closure)
+{
+ struct symtab *symtab = NULL;
+ struct compunit_symtab *cust;
+
+ STPY_REQUIRE_VALID (self, symtab);
+ cust = SYMTAB_COMPUNIT (symtab);
+ if (COMPUNIT_PRODUCER (cust) != NULL)
+ {
+ const char *producer = COMPUNIT_PRODUCER (cust);
+
+ return host_string_to_python_string (producer);
+ }
+
+ Py_RETURN_NONE;
+}
+
static PyObject *
stpy_fullname (PyObject *self, PyObject *args)
{
fullname = symtab_to_fullname (symtab);
- return PyString_Decode (fullname, strlen (fullname), host_charset (), NULL);
+ return host_string_to_python_string (fullname);
}
/* Implementation of gdb.Symtab.is_valid (self) -> Boolean.
STPY_REQUIRE_VALID (self, symtab);
- blockvector = BLOCKVECTOR (symtab);
+ blockvector = SYMTAB_BLOCKVECTOR (symtab);
block = BLOCKVECTOR_BLOCK (blockvector, GLOBAL_BLOCK);
- return block_to_block_object (block, symtab->objfile);
+ return block_to_block_object (block, SYMTAB_OBJFILE (symtab));
}
/* Return the STATIC_BLOCK of the underlying symtab. */
STPY_REQUIRE_VALID (self, symtab);
- blockvector = BLOCKVECTOR (symtab);
+ blockvector = SYMTAB_BLOCKVECTOR (symtab);
block = BLOCKVECTOR_BLOCK (blockvector, STATIC_BLOCK);
- return block_to_block_object (block, symtab->objfile);
+ return block_to_block_object (block, SYMTAB_OBJFILE (symtab));
}
-/* Implementation of gdb.Symtab.linetable (self) -> gdb.Linetable.
- Returns a gdb.Linetable object corresponding to this symbol
+/* Implementation of gdb.Symtab.linetable (self) -> gdb.LineTable.
+ Returns a gdb.LineTable object corresponding to this symbol
table. */
static PyObject *
symtab->prev->next = symtab->next;
else if (symtab->symtab)
{
- set_objfile_data (symtab->symtab->objfile,
+ set_objfile_data (SYMTAB_OBJFILE (symtab->symtab),
stpy_objfile_data_key, symtab->next);
}
if (symtab->next)
if (self_sal->prev)
self_sal->prev->next = self_sal->next;
else if (self_sal->symtab != (symtab_object * ) Py_None)
- set_objfile_data (self_sal->symtab->symtab->objfile,
+ set_objfile_data (SYMTAB_OBJFILE (self_sal->symtab->symtab),
salpy_objfile_data_key, self_sal->next);
if (self_sal->next)
Py_INCREF (Py_None);
}
- sal_obj->sal = xmemdup (&sal, sizeof (struct symtab_and_line),
- sizeof (struct symtab_and_line));
+ sal_obj->sal = ((struct symtab_and_line *)
+ xmemdup (&sal, sizeof (struct symtab_and_line),
+ sizeof (struct symtab_and_line)));
sal_obj->symtab = symtab_obj;
sal_obj->prev = NULL;
objfile cleanup observer linked list. */
if (sal_obj->symtab != (symtab_object *)Py_None)
{
- sal_obj->next = objfile_data (sal_obj->symtab->symtab->objfile,
- salpy_objfile_data_key);
+ sal_obj->next
+ = ((struct salpy_sal_object *)
+ objfile_data (SYMTAB_OBJFILE (sal_obj->symtab->symtab),
+ salpy_objfile_data_key));
if (sal_obj->next)
sal_obj->next->prev = sal_obj;
- set_objfile_data (sal_obj->symtab->symtab->objfile,
+ set_objfile_data (SYMTAB_OBJFILE (sal_obj->symtab->symtab),
salpy_objfile_data_key, sal_obj);
}
else
obj->prev = NULL;
if (symtab)
{
- obj->next = objfile_data (symtab->objfile, stpy_objfile_data_key);
+ obj->next
+ = ((struct stpy_symtab_object *)
+ objfile_data (SYMTAB_OBJFILE (symtab), stpy_objfile_data_key));
if (obj->next)
obj->next->prev = obj;
- set_objfile_data (symtab->objfile, stpy_objfile_data_key, obj);
+ set_objfile_data (SYMTAB_OBJFILE (symtab), stpy_objfile_data_key, obj);
}
else
obj->next = NULL;
symtab_and_line_to_sal_object (struct symtab_and_line sal)
{
sal_object *sal_obj;
- int success = 0;
sal_obj = PyObject_New (sal_object, &sal_object_type);
if (sal_obj)
static void
del_objfile_symtab (struct objfile *objfile, void *datum)
{
- symtab_object *obj = datum;
+ symtab_object *obj = (symtab_object *) datum;
while (obj)
{
static void
del_objfile_sal (struct objfile *objfile, void *datum)
{
- sal_object *obj = datum;
+ sal_object *obj = (sal_object *) datum;
while (obj)
{
"The symbol table's source filename.", NULL },
{ "objfile", stpy_get_objfile, NULL, "The symtab's objfile.",
NULL },
+ { "producer", stpy_get_producer, NULL,
+ "The name/version of the program that compiled this symtab.", NULL },
{NULL} /* Sentinel */
};
"static_block () -> gdb.Block.\n\
Return the static block of the symbol table." },
{ "linetable", stpy_get_linetable, METH_NOARGS,
- "linetable () -> gdb.Linetable.\n\
-Return the Linetable associated with this symbol table" },
+ "linetable () -> gdb.LineTable.\n\
+Return the LineTable associated with this symbol table" },
{NULL} /* Sentinel */
};
-static PyTypeObject symtab_object_type = {
+PyTypeObject symtab_object_type = {
PyVarObject_HEAD_INIT (NULL, 0)
"gdb.Symtab", /*tp_name*/
sizeof (symtab_object), /*tp_basicsize*/
{NULL} /* Sentinel */
};
-static PyTypeObject sal_object_type = {
+PyTypeObject sal_object_type = {
PyVarObject_HEAD_INIT (NULL, 0)
"gdb.Symtab_and_line", /*tp_name*/
sizeof (sal_object), /*tp_basicsize*/