/* Python pretty-printing
- Copyright (C) 2008-2012 Free Software Foundation, Inc.
+ Copyright (C) 2008-2013 Free Software Foundation, Inc.
This file is part of GDB.
if (!attr)
return NULL;
cmp = PyObject_IsTrue (attr);
+ Py_DECREF (attr);
if (cmp == -1)
return NULL;
string = python_string_to_target_python_string (py_str);
if (string)
{
- gdb_byte *output;
+ char *output;
long length;
struct type *type;
make_cleanup_py_decref (string);
+#ifdef IS_PY3K
+ output = PyBytes_AS_STRING (string);
+ length = PyBytes_GET_SIZE (string);
+#else
output = PyString_AsString (string);
length = PyString_Size (string);
+#endif
type = builtin_type (gdbarch)->builtin_char;
if (hint && !strcmp (hint, "string"))
- LA_PRINT_STRING (stream, type, output, length, NULL,
- 0, options);
+ LA_PRINT_STRING (stream, type, (gdb_byte *) output,
+ length, NULL, 0, options);
else
fputs_filtered (output, stream);
}
return result;
}
+#ifndef IS_PY3K
static void
py_restore_tstate (void *p)
{
make_cleanup (py_restore_tstate, frame->f_back);
return (PyObject *) frame;
}
+#endif
/* Helper for apply_val_pretty_printer that formats children of the
printer, if any exist. If is_py_none is true, then nothing has
{
int is_map, is_array, done_flag, pretty;
unsigned int i;
- PyObject *children, *iter, *frame;
+ PyObject *children, *iter;
+#ifndef IS_PY3K
+ PyObject *frame;
+#endif
struct cleanup *cleanups;
if (! PyObject_HasAttr (printer, gdbpy_children_cst))
/* Manufacture a dummy Python frame to work around Python 2.4 bug,
where it insists on having a non-NULL tstate->frame when
a generator is called. */
+#ifndef IS_PY3K
frame = push_dummy_python_frame ();
if (!frame)
{
goto done;
}
make_cleanup_py_decref (frame);
+#endif
done_flag = 0;
for (i = 0; i < options->print_max; ++i)
local_opts.addressprint = 0;
val_print_string (type, encoding, addr, (int) length, stream,
&local_opts);
-
- do_cleanups (inner_cleanup);
}
else if (gdbpy_is_string (py_v))
{
- gdb_byte *output;
+ char *output;
output = python_string_to_host_string (py_v);
if (!output)
if (!value_bytes_available (val, embedded_offset, TYPE_LENGTH (type)))
return 0;
+ if (!gdb_python_initialized)
+ return 0;
+
cleanups = ensure_python_env (gdbarch, language);
/* Instantiate the printer. */
/* Find the constructor. */
printer = find_pretty_printer (val_obj);
Py_DECREF (val_obj);
+
+ if (printer == NULL)
+ goto done;
+
make_cleanup_py_decref (printer);
- if (! printer || printer == Py_None)
+ if (printer == Py_None)
goto done;
/* If we are printing a map, we want some special formatting. */