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."));\
136 for (i = 0; i < pcs.size (); ++i)
138 CORE_ADDR pc = pcs[i];
143 else if (PyTuple_SetItem (tuple.get (), i, obj.release ()) != 0)
147 return tuple.release ();
160 std::vector<CORE_ADDR> pcs;
171 catch (
const gdb_exception &except)
197 PyErr_SetString (PyExc_RuntimeError,
198 _(
"Linetable information not found in symbol table"));
205 if (item->
line == py_line)
228 PyErr_SetString (PyExc_RuntimeError,
229 _(
"Linetable information not found in symbol table"));
234 if (source_dict == NULL)
250 if (PyDict_SetItem (source_dict.get (),
line.get (), Py_None) == -1)
255 return PyDict_Keys (source_dict.get ());
283 Py_TYPE (self)->tp_free (self);
356 if (ltpy_iter_obj == NULL)
360 ltpy_iter_obj->
source = self;
371 Py_DECREF (iter_obj->
source);
372 Py_TYPE (obj)->tp_free (obj);
404 PyErr_SetNone (PyExc_StopIteration);
412 while (item->
line < 1)
419 PyErr_SetNone (PyExc_StopIteration);
453 "line (lineno) -> Tuple\n\
454Return executable locations for a given source line." },
456 "has_line (lineno) -> Boolean\n\
457Return TRUE if this line has executable information, FALSE if not." },
459 "source_lines () -> List\n\
460Return a list of all executable source lines." },
462 "is_valid () -> Boolean.\n\
463Return True if this LineTable is valid, False if not." },
468 PyVarObject_HEAD_INIT (NULL, 0)
488 "GDB line table object",
509 "is_valid () -> Boolean.\n\
510Return True if this LineTable iterator is valid, False if not." },
515 PyVarObject_HEAD_INIT (NULL, 0)
516 "gdb.LineTableIterator",
535 "GDB line table iterator object",
548 "The line number in the source file.", NULL },
550 "The memory address for this line number.", NULL },
555 PyVarObject_HEAD_INIT (NULL, 0)
556 "gdb.LineTableEntry",
575 "GDB line table entry object",
static PyObject * ltpy_entry_get_pc(PyObject *self, void *closure)
static PyObject * ltpy_iterator(PyObject *self)
#define LTPY_REQUIRE_VALID(lt_obj, symtab)
PyObject * symtab_to_linetable_object(PyObject *symtab)
static void ltpy_dealloc(PyObject *self)
PyTypeObject linetable_object_type
static void ltpy_iterator_dealloc(PyObject *obj)
static PyMethodDef ltpy_iterator_methods[]
static PyObject * ltpy_get_all_source_lines(PyObject *self, PyObject *args)
static PyObject * get_symtab(PyObject *linetable)
static gdb_PyGetSetDef linetable_entry_object_getset[]
static PyObject * ltpy_iter(PyObject *self)
static PyObject * ltpy_get_pcs_for_line(PyObject *self, PyObject *args)
static PyObject * build_linetable_entry(int line, CORE_ADDR address)
static PyObject * ltpy_is_valid(PyObject *self, PyObject *args)
static PyObject * ltpy_iter_is_valid(PyObject *self, PyObject *args)
static PyMethodDef linetable_object_methods[]
static PyObject * ltpy_entry_get_line(PyObject *self, void *closure)
static PyObject * ltpy_has_line(PyObject *self, PyObject *args)
static PyObject * ltpy_iternext(PyObject *self)
PyTypeObject linetable_entry_object_type
PyTypeObject ltpy_iterator_object_type
static PyObject * build_line_table_tuple_from_pcs(int line, const std::vector< CORE_ADDR > &pcs)
int gdbpy_initialize_linetable(void)
gdb::ref_ptr< T, gdbpy_ref_policy< T > > gdbpy_ref
struct symtab * symtab_object_to_symtab(PyObject *obj)
gdbpy_ref gdb_py_object_from_longest(LONGEST l)
int gdb_pymodule_addobject(PyObject *module, const char *name, PyObject *object)
gdbpy_ref gdb_py_object_from_ulongest(ULONGEST l)
#define CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF(ARG)
#define GDB_PY_HANDLE_EXCEPTION(Exception)
PyObject_HEAD PyObject * symtab
struct linetable_entry item[1]
PyObject_HEAD int current_index
struct linetable * linetable() const
std::vector< CORE_ADDR > find_pcs_for_symtab_line(struct symtab *symtab, int line, struct linetable_entry **best_item)