diff options
author | Tom Tromey <tom@tromey.com> | 2016-11-08 11:38:22 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2017-01-10 19:13:46 -0700 |
commit | e9f0c3639f33dc76fcab1b9299209c29ef2ee26e (patch) | |
tree | 4ad6db2c896a5b6e2b2dfd1be58a4169038647bd /gdb/python | |
parent | 6349f452e01ddb7a1e64b8a63c93a9c9abc95725 (diff) | |
download | gdb-e9f0c3639f33dc76fcab1b9299209c29ef2ee26e.zip gdb-e9f0c3639f33dc76fcab1b9299209c29ef2ee26e.tar.gz gdb-e9f0c3639f33dc76fcab1b9299209c29ef2ee26e.tar.bz2 |
Use gdbpy_enter in py-prettyprint.c
Change py-prettyprint.c to use gdbpy_enter.
2017-01-10 Tom Tromey <tom@tromey.com>
* python/py-prettyprint.c (gdbpy_apply_val_pretty_printer): Use
gdbpy_enter, gdbpy_ref, unique_xmalloc_ptr.
Diffstat (limited to 'gdb/python')
-rw-r--r-- | gdb/python/py-prettyprint.c | 45 |
1 files changed, 15 insertions, 30 deletions
diff --git a/gdb/python/py-prettyprint.c b/gdb/python/py-prettyprint.c index 8e84809..a4bdf87 100644 --- a/gdb/python/py-prettyprint.c +++ b/gdb/python/py-prettyprint.c @@ -682,12 +682,7 @@ gdbpy_apply_val_pretty_printer (const struct extension_language_defn *extlang, const struct language_defn *language) { struct gdbarch *gdbarch = get_type_arch (type); - PyObject *printer = NULL; - PyObject *val_obj = NULL; struct value *value; - gdb::unique_xmalloc_ptr<char> hint; - struct cleanup *cleanups; - enum ext_lang_rc result = EXT_LANG_RC_NOP; enum string_repr_result print_result; const gdb_byte *valaddr = value_contents_for_printing (val); @@ -698,52 +693,42 @@ gdbpy_apply_val_pretty_printer (const struct extension_language_defn *extlang, if (!gdb_python_initialized) return EXT_LANG_RC_NOP; - cleanups = ensure_python_env (gdbarch, language); + gdbpy_enter enter_py (gdbarch, language); /* Instantiate the printer. */ value = value_from_component (val, type, embedded_offset); - val_obj = value_to_value_object (value); - if (! val_obj) + gdbpy_ref val_obj (value_to_value_object (value)); + if (val_obj == NULL) { - result = EXT_LANG_RC_ERROR; - goto done; + print_stack_unless_memory_error (stream); + return EXT_LANG_RC_ERROR; } /* Find the constructor. */ - printer = find_pretty_printer (val_obj); - Py_DECREF (val_obj); - + gdbpy_ref printer (find_pretty_printer (val_obj.get ())); if (printer == NULL) { - result = EXT_LANG_RC_ERROR; - goto done; + print_stack_unless_memory_error (stream); + return EXT_LANG_RC_ERROR; } - make_cleanup_py_decref (printer); if (printer == Py_None) - { - result = EXT_LANG_RC_NOP; - goto done; - } + return EXT_LANG_RC_NOP; /* If we are printing a map, we want some special formatting. */ - hint = gdbpy_get_display_hint (printer); + gdb::unique_xmalloc_ptr<char> hint (gdbpy_get_display_hint (printer.get ())); /* Print the section */ - print_result = print_string_repr (printer, hint.get (), stream, recurse, - options, language, gdbarch); + print_result = print_string_repr (printer.get (), hint.get (), stream, + recurse, options, language, gdbarch); if (print_result != string_repr_error) - print_children (printer, hint.get (), stream, recurse, options, language, - print_result == string_repr_none); + print_children (printer.get (), hint.get (), stream, recurse, options, + language, print_result == string_repr_none); - result = EXT_LANG_RC_OK; - - done: if (PyErr_Occurred ()) print_stack_unless_memory_error (stream); - do_cleanups (cleanups); - return result; + return EXT_LANG_RC_OK; } |