41 #define SYMPY_REQUIRE_VALID(symbol_obj, symbol) \
43 symbol = symbol_object_to_symbol (symbol_obj); \
46 PyErr_SetString (PyExc_RuntimeError, \
47 _("Symbol is invalid.")); \
169 return PyBool_FromLong (theclass ==
LOC_BLOCK);
250 PyObject *frame_obj = NULL;
253 if (!PyArg_ParseTuple (args,
"|O", &frame_obj))
258 PyErr_SetString (PyExc_TypeError,
"argument is not a frame");
265 PyErr_SetString (PyExc_TypeError,
"cannot get the value of a typedef");
271 if (frame_obj != NULL)
274 if (frame_info == NULL)
275 error (
_(
"invalid frame"));
279 error (
_(
"symbol requires a frame to compute its value"));
307 obj->
next = objfile_data (objfile, sympy_objfile_data_key);
310 set_objfile_data (objfile, sympy_objfile_data_key, obj);
327 return (PyObject *) sym_obj;
346 else if (sym_obj->
symbol != NULL
351 sympy_objfile_data_key, sym_obj->
next);
370 static char *keywords[] = {
"name",
"block",
"domain", NULL };
372 PyObject *block_obj = NULL, *ret_tuple, *sym_obj, *bool_obj;
375 if (! PyArg_ParseTupleAndKeywords (args, kw,
"s|O!i", keywords, &name,
399 symbol =
lookup_symbol (name, block, domain, &is_a_field_of_this);
407 ret_tuple = PyTuple_New (2);
425 PyTuple_SET_ITEM (ret_tuple, 0, sym_obj);
427 bool_obj = (is_a_field_of_this.
type != NULL) ? Py_True : Py_False;
428 Py_INCREF (bool_obj);
429 PyTuple_SET_ITEM (ret_tuple, 1, bool_obj);
442 static char *keywords[] = {
"name",
"domain", NULL };
446 if (! PyArg_ParseTupleAndKeywords (args, kw,
"s|i", keywords, &name,
505 sympy_objfile_data_key
509 || PyModule_AddIntConstant (
gdb_module,
"SYMBOL_LOC_CONST",
511 || PyModule_AddIntConstant (
gdb_module,
"SYMBOL_LOC_STATIC",
513 || PyModule_AddIntConstant (
gdb_module,
"SYMBOL_LOC_REGISTER",
515 || PyModule_AddIntConstant (
gdb_module,
"SYMBOL_LOC_ARG",
517 || PyModule_AddIntConstant (
gdb_module,
"SYMBOL_LOC_REF_ARG",
519 || PyModule_AddIntConstant (
gdb_module,
"SYMBOL_LOC_LOCAL",
521 || PyModule_AddIntConstant (
gdb_module,
"SYMBOL_LOC_TYPEDEF",
523 || PyModule_AddIntConstant (
gdb_module,
"SYMBOL_LOC_LABEL",
525 || PyModule_AddIntConstant (
gdb_module,
"SYMBOL_LOC_BLOCK",
527 || PyModule_AddIntConstant (
gdb_module,
"SYMBOL_LOC_CONST_BYTES",
529 || PyModule_AddIntConstant (
gdb_module,
"SYMBOL_LOC_UNRESOLVED",
531 || PyModule_AddIntConstant (
gdb_module,
"SYMBOL_LOC_OPTIMIZED_OUT",
533 || PyModule_AddIntConstant (
gdb_module,
"SYMBOL_LOC_COMPUTED",
535 || PyModule_AddIntConstant (
gdb_module,
"SYMBOL_LOC_REGPARM_ADDR",
537 || PyModule_AddIntConstant (
gdb_module,
"SYMBOL_UNDEF_DOMAIN",
539 || PyModule_AddIntConstant (
gdb_module,
"SYMBOL_VAR_DOMAIN",
541 || PyModule_AddIntConstant (
gdb_module,
"SYMBOL_STRUCT_DOMAIN",
543 || PyModule_AddIntConstant (
gdb_module,
"SYMBOL_LABEL_DOMAIN",
545 || PyModule_AddIntConstant (
gdb_module,
"SYMBOL_VARIABLES_DOMAIN",
547 || PyModule_AddIntConstant (
gdb_module,
"SYMBOL_FUNCTIONS_DOMAIN",
549 || PyModule_AddIntConstant (
gdb_module,
"SYMBOL_TYPES_DOMAIN",
561 "Type of the symbol.", NULL },
563 "Symbol table in which the symbol appears.", NULL },
565 "Name of the symbol, as it appears in the source code.", NULL },
567 "Name of the symbol, as used by the linker (i.e., may be mangled).",
570 "Name of the symbol in a form suitable for output.\n\
571 This is either name or linkage_name, depending on whether the user asked GDB\n\
572 to display demangled or mangled names.", NULL },
575 "True if the symbol is an argument of a function." },
577 "True if the symbol is a constant." },
579 "True if the symbol is a function or method." },
581 "True if the symbol is a variable." },
583 "True if the symbol requires a frame for evaluation." },
585 "The source line number at which the symbol was defined." },
591 "is_valid () -> Boolean.\n\
592 Return true if this symbol is valid, false if not." },
594 "value ([frame]) -> gdb.Value\n\
595 Return the value of the symbol." },
627 symbol_object_methods,
int gdb_pymodule_addobject(PyObject *module, const char *name, PyObject *object)
int gdbpy_initialize_symbols(void)
static PyObject * sympy_value(PyObject *self, PyObject *args)
struct frame_info * get_selected_frame(const char *message)
#define SYMBOL_PRINT_NAME(symbol)
static struct frame_info * selected_frame
struct sympy_symbol_object * next
static void sympy_dealloc(PyObject *obj)
static void set_symbol(symbol_object *obj, struct symbol *symbol)
static PyObject * sympy_get_linkage_name(PyObject *self, void *closure)
PyTypeObject block_object_type
struct sympy_symbol_object symbol_object
#define SYMBOL_CLASS(symbol)
PyObject_HEAD struct symbol * symbol
struct value * read_var_value(struct symbol *var, struct frame_info *frame)
struct symbol * symbol_object_to_symbol(PyObject *obj)
PyTypeObject frame_object_type
struct objfile * symbol_objfile(const struct symbol *symbol)
static PyObject * sympy_get_addr_class(PyObject *self, void *closure)
static PyObject * sympy_line(PyObject *self, void *closure)
PyObject * symtab_to_symtab_object(struct symtab *symtab)
static const struct objfile_data * sympy_objfile_data_key
#define GDB_PY_HANDLE_EXCEPTION(Exception)
PyTypeObject symbol_object_type
#define CATCH(EXCEPTION, MASK)
static PyObject * sympy_is_function(PyObject *self, void *closure)
const struct block * get_frame_block(struct frame_info *frame, CORE_ADDR *addr_in_block)
int symbol_read_needs_frame(struct symbol *sym)
const struct block * block_object_to_block(PyObject *obj)
#define SYMBOL_LINE(symbol)
#define SYMBOL_LINKAGE_NAME(symbol)
PyObject * value_to_value_object(struct value *val)
PyObject * gdbpy_lookup_symbol(PyObject *self, PyObject *args, PyObject *kw)
static PyObject * sympy_is_variable(PyObject *self, void *closure)
static void del_objfile_symbols(struct objfile *objfile, void *datum)
static PyObject * sympy_str(PyObject *self)
static PyObject * sympy_get_name(PyObject *self, void *closure)
#define SYMBOL_OBJFILE_OWNED(symbol)
#define SYMPY_REQUIRE_VALID(symbol_obj, symbol)
static PyObject * sympy_get_symtab(PyObject *self, void *closure)
struct symbol * lookup_global_symbol(const char *name, const struct block *block, const domain_enum domain)
static PyObject * sympy_get_print_name(PyObject *self, void *closure)
static PyMethodDef symbol_object_methods[]
static PyObject * sympy_is_constant(PyObject *self, void *closure)
struct symbol * lookup_symbol(const char *name, const struct block *block, domain_enum domain, struct field_of_this_result *is_a_field_of_this)
PyObject * gdbpy_lookup_global_symbol(PyObject *self, PyObject *args, PyObject *kw)
#define SYMBOL_NATURAL_NAME(symbol)
#define SYMBOL_TYPE(symbol)
struct sympy_symbol_object * prev
static PyGetSetDef symbol_object_getset[]
static PyObject * sympy_is_argument(PyObject *self, void *closure)
PyObject * symbol_to_symbol_object(struct symbol *sym)
struct frame_info * frame_object_to_frame_info(PyObject *obj)
static PyObject * sympy_is_valid(PyObject *self, PyObject *args)
struct symtab * symbol_symtab(const struct symbol *symbol)
void error(const char *fmt,...)
static PyObject * sympy_get_type(PyObject *self, void *closure)
#define SYMBOL_IS_ARGUMENT(symbol)
static PyObject * sympy_needs_frame(PyObject *self, void *closure)
__extension__ enum domain_enum_tag domain
#define PyVarObject_HEAD_INIT(type, size)
PyObject * type_to_type_object(struct type *type)