31 extern PyTypeObject linetable_entry_object_type
42 extern PyTypeObject linetable_object_type
55 extern PyTypeObject ltpy_iterator_object_type
69 #define LTPY_REQUIRE_VALID(lt_obj, symtab) \
71 symtab = symtab_object_to_symtab (get_symtab (lt_obj)); \
74 PyErr_SetString (PyExc_RuntimeError, \
75 _("Symbol Table in line table is invalid."));\
95 return (PyObject *) ltable;
107 &linetable_entry_object_type);
114 return (PyObject *) obj;
135 tuple = PyTuple_New (vec_len);
150 else if (PyTuple_SetItem (tuple, i, obj) != 0)
183 pcs = find_pcs_for_symtab_line (symtab, py_line, &best_entry);
215 PyErr_SetString (PyExc_RuntimeError,
216 _(
"Linetable information not found in symbol table"));
223 if (item->
line == py_line)
240 PyObject *source_list, *source_dict, *
line;
242 Py_ssize_t list_size;
248 PyErr_SetString (PyExc_RuntimeError,
249 _(
"Linetable information not found in symbol table"));
253 source_dict = PyDict_New ();
254 if (source_dict == NULL)
273 if (PyDict_SetItem (source_dict, line, Py_None) == -1)
285 source_list = PyDict_Keys (source_dict);
317 Py_TYPE (
self)->tp_free (
self);
326 if (PyType_Ready (&linetable_object_type) < 0)
328 if (PyType_Ready (&linetable_entry_object_type) < 0)
330 if (PyType_Ready (<py_iterator_object_type) < 0)
333 Py_INCREF (&linetable_object_type);
334 Py_INCREF (&linetable_entry_object_type);
335 Py_INCREF (<py_iterator_object_type);
338 (PyObject *) &linetable_object_type) < 0)
342 (PyObject *) &linetable_entry_object_type) < 0)
346 (PyObject *) <py_iterator_object_type) < 0)
389 <py_iterator_object_type);
390 if (ltpy_iter_obj == NULL)
394 ltpy_iter_obj->
source =
self;
397 return (PyObject *) ltpy_iter_obj;
443 while (item->
line < 1)
459 PyErr_SetNone (PyExc_StopIteration);
483 static PyMethodDef linetable_object_methods[] = {
485 "line (lineno) -> Tuple\n\
486 Return executable locations for a given source line." },
488 "has_line (lineno) -> Boolean\n\
489 Return TRUE if this line has executable information, FALSE if not." },
491 "source_lines () -> FrozenSet\n\
492 Return a frozen set of all executable source lines." },
494 "is_valid () -> Boolean.\n\
495 Return True if this Linetable is valid, False if not." },
499 PyTypeObject linetable_object_type = {
520 "GDB line table object",
527 linetable_object_methods,
539 static PyMethodDef ltpy_iterator_methods[] = {
541 "is_valid () -> Boolean.\n\
542 Return True if this Linetable iterator is valid, False if not." },
546 PyTypeObject ltpy_iterator_object_type = {
548 "gdb.LineTableIterator",
566 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER,
567 "GDB line table iterator object",
574 ltpy_iterator_methods
578 static PyGetSetDef linetable_entry_object_getset[] = {
580 "The line number in the source file.", NULL },
582 "The memory address for this line number.", NULL },
586 PyTypeObject linetable_entry_object_type = {
588 "gdb.LineTableEntry",
607 "GDB line table entry object",
616 linetable_entry_object_getset,
static void ltpy_iterator_dealloc(PyObject *obj)
int gdb_pymodule_addobject(PyObject *module, const char *name, PyObject *object)
PyObject_HEAD PyObject * symtab
PyTypeObject linetable_entry_object_type CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("linetable_entry_object")
#define LTPY_REQUIRE_VALID(lt_obj, symtab)
PyObject_HEAD int current_index
static PyObject * build_line_table_tuple_from_pcs(int line, VEC(CORE_ADDR)*vec)
static PyObject * ltpy_get_all_source_lines(PyObject *self, PyObject *args)
static PyObject * ltpy_entry_get_pc(PyObject *self, void *closure)
PyObject * symtab_to_linetable_object(PyObject *symtab)
static PyObject * ltpy_get_pcs_for_line(PyObject *self, PyObject *args)
#define GDB_PY_HANDLE_EXCEPTION(Exception)
static PyObject * ltpy_is_valid(PyObject *self, PyObject *args)
#define VEC_iterate(T, V, I, P)
#define CATCH(EXCEPTION, MASK)
static PyObject * ltpy_entry_get_line(PyObject *self, void *closure)
PyObject * gdb_py_object_from_longest(LONGEST l)
struct symtab * symtab_object_to_symtab(PyObject *obj)
static PyObject * ltpy_iter(PyObject *self)
int struct linetable_entry ** best_entry
static PyObject * ltpy_iternext(PyObject *self)
static PyObject * get_symtab(PyObject *linetable)
static void ltpy_dealloc(PyObject *self)
static PyObject * ltpy_iterator(PyObject *self)
int gdbpy_initialize_linetable(void)
static PyObject * ltpy_iter_is_valid(PyObject *self, PyObject *args)
static PyObject * build_linetable_entry(int line, CORE_ADDR address)
static PyObject * ltpy_has_line(PyObject *self, PyObject *args)
#define SYMTAB_LINETABLE(symtab)
#define PyVarObject_HEAD_INIT(type, size)