forked from Imagelibrary/binutils-gdb
2010-01-13 Phil Muldoon <pmuldoon@redhat.com>
PR python/10705 * python/python-internal.h: Add lazy_string_object_type definition. (create_lazy_string_object, gdbpy_initialize_lazy_string) (gdbpy_is_lazystring, gdbpy_extract_lazy_string): Define. * python/py-value.c (valpy_lazy_string): New function. (convert_value_from_python): Add lazy string conversion. * python/py-prettyprint.c (pretty_print_one_value): Check if return is also a lazy string. (print_string_repr): Add lazy string printing branch. (print_children): Likewise. * python/py-lazy-string.c: New file. Implement lazy strings. * python/python.c (_initialize_python): Call gdbpy_initialize_lazy_string. * varobj.c (value_get_print_value): Add lazy string printing branch. Account for encoding. * c-lang.c (c_printstr): Account for new encoding argument. If encoding is NULL, find encoding suited for type, otherwise use user encoding. * language.h (language_defn): Add encoding argument. (LA_PRINT_STRING): Likewise. * language.c (unk_lang_printstr): Update to reflect new encoding argument to language_defn. * ada-lang.h (ada_printstr): Likewise. * c-lang.h (c_printstr): Likewise. * p-lang.h (pascal_printstr); * f-lang.c (f_printstr): Likewise. * m2-lang.c (m2_printstr): Likewise. * objc-lang.c (objc_printstr): Likewise. * p-lang.c (pascal_printstr): Likewise. * scm-lang.c (scm_printstr): Likewise. * c-valprint.c (c_val_print): Update LA_PRINT_STRING call for encoding argument. * ada-valprint.c (ada_printstr): Likewise. * f-valprint.c (f_val_print): Likewise * m2-valprint.c (m2_val_print): Likewise. * p-valprint.c (pascal_val_print): Likewise. * expprint.c (print_subexp_standard): Likewise. * valprint.c (val_print_string): Likewise. * Makefile.in (SUBDIR_PYTHON_OBS): Add py-lazy-string. (SUBDIR_PYTHON_SRCS): Likewise. (py-lazy-string.o): New rule. 2010-01-13 Phil Muldoon <pmuldoon@redhat.com> * gdb.texinfo (Values From Inferior): Document lazy_string value method. (Python API): Add Lazy strings menu item. (Lazy Strings In Python): New node. 2010-01-13 Phil Muldoon <pmuldoon@redhat.com> * gdb.python/py-value.exp (test_lazy_strings): Add lazy string test. * gdb.python/py-prettyprint.py (pp_ls): New printer. * gdb.python/py-prettyprint.exp (run_lang_tests): Add lazy string test. * gdb.python/py-prettyprint.c: Define lazystring test structure. * gdb.python/py-mi.exp: Add lazy string test.
This commit is contained in:
36
gdb/varobj.c
36
gdb/varobj.c
@@ -2453,11 +2453,15 @@ value_get_print_value (struct value *value, enum varobj_display_formats format,
|
||||
struct cleanup *old_chain;
|
||||
gdb_byte *thevalue = NULL;
|
||||
struct value_print_options opts;
|
||||
int len = 0;
|
||||
struct type *type = NULL;
|
||||
long len = 0;
|
||||
char *encoding = NULL;
|
||||
struct gdbarch *gdbarch = NULL;
|
||||
|
||||
if (value == NULL)
|
||||
return NULL;
|
||||
|
||||
gdbarch = get_type_arch (value_type (value));
|
||||
#if HAVE_PYTHON
|
||||
{
|
||||
struct cleanup *back_to = varobj_ensure_python_env (var);
|
||||
@@ -2489,20 +2493,31 @@ value_get_print_value (struct value *value, enum varobj_display_formats format,
|
||||
&replacement);
|
||||
if (output)
|
||||
{
|
||||
PyObject *py_str
|
||||
= python_string_to_target_python_string (output);
|
||||
if (py_str)
|
||||
if (gdbpy_is_lazy_string (output))
|
||||
{
|
||||
char *s = PyString_AsString (py_str);
|
||||
len = PyString_Size (py_str);
|
||||
thevalue = xmemdup (s, len + 1, len + 1);
|
||||
Py_DECREF (py_str);
|
||||
thevalue = gdbpy_extract_lazy_string (output, &type,
|
||||
&len, &encoding);
|
||||
string_print = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
PyObject *py_str
|
||||
= python_string_to_target_python_string (output);
|
||||
if (py_str)
|
||||
{
|
||||
char *s = PyString_AsString (py_str);
|
||||
len = PyString_Size (py_str);
|
||||
thevalue = xmemdup (s, len + 1, len + 1);
|
||||
type = builtin_type (gdbarch)->builtin_char;
|
||||
Py_DECREF (py_str);
|
||||
}
|
||||
}
|
||||
Py_DECREF (output);
|
||||
}
|
||||
if (thevalue && !string_print)
|
||||
{
|
||||
do_cleanups (back_to);
|
||||
xfree (encoding);
|
||||
return thevalue;
|
||||
}
|
||||
if (replacement)
|
||||
@@ -2521,10 +2536,9 @@ value_get_print_value (struct value *value, enum varobj_display_formats format,
|
||||
opts.raw = 1;
|
||||
if (thevalue)
|
||||
{
|
||||
struct gdbarch *gdbarch = get_type_arch (value_type (value));
|
||||
make_cleanup (xfree, thevalue);
|
||||
LA_PRINT_STRING (stb, builtin_type (gdbarch)->builtin_char,
|
||||
thevalue, len, 0, &opts);
|
||||
make_cleanup (xfree, encoding);
|
||||
LA_PRINT_STRING (stb, type, thevalue, len, encoding, 0, &opts);
|
||||
}
|
||||
else
|
||||
common_val_print (value, stb, 0, &opts, current_language);
|
||||
|
||||
Reference in New Issue
Block a user