diff options
author | Phil Muldoon <pmuldoon@redhat.com> | 2010-01-14 08:03:37 +0000 |
---|---|---|
committer | Phil Muldoon <pmuldoon@redhat.com> | 2010-01-14 08:03:37 +0000 |
commit | be759fcf73cbf7ac59863c57389cd97c70c09a47 (patch) | |
tree | f3261b3c2096f57e5a2e09242ecc82a2cc7acb8b /gdb/testsuite | |
parent | 009f105539b0fedd36d9d1de940a3822372ed818 (diff) | |
download | gdb-be759fcf73cbf7ac59863c57389cd97c70c09a47.zip gdb-be759fcf73cbf7ac59863c57389cd97c70c09a47.tar.gz gdb-be759fcf73cbf7ac59863c57389cd97c70c09a47.tar.bz2 |
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.
Diffstat (limited to 'gdb/testsuite')
-rw-r--r-- | gdb/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-mi.exp | 4 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-prettyprint.c | 8 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-prettyprint.exp | 1 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-prettyprint.py | 15 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-value.c | 2 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-value.exp | 14 |
7 files changed, 53 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index d40a2ff..0d440c6 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,12 @@ +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. + 2010-01-13 Vladimir Prus <vladimir@codesourcery.com> * lib/mi-support.exp (mi_check_thread_states): Handle diff --git a/gdb/testsuite/gdb.python/py-mi.exp b/gdb/testsuite/gdb.python/py-mi.exp index 8c78429..5f25fe6 100644 --- a/gdb/testsuite/gdb.python/py-mi.exp +++ b/gdb/testsuite/gdb.python/py-mi.exp @@ -67,6 +67,10 @@ mi_create_varobj_checked string string_1 \ "struct string_repr" \ "create string_1 varobj" +mi_create_varobj_checked lstring estring \ + "struct lazystring" \ + "create estring varobj" + mi_gdb_test "-data-evaluate-expression \"string_1 = string_2\"" ".*" \ "assign string_1 from string_2" diff --git a/gdb/testsuite/gdb.python/py-prettyprint.c b/gdb/testsuite/gdb.python/py-prettyprint.c index 6547e01..e1f696f 100644 --- a/gdb/testsuite/gdb.python/py-prettyprint.c +++ b/gdb/testsuite/gdb.python/py-prettyprint.c @@ -34,6 +34,10 @@ struct ns { int length; }; +struct lazystring { + const char *lazy_str; +}; + #ifdef __cplusplus struct S : public s { int zs; @@ -193,6 +197,7 @@ main () /* Clearing by being `static' could invoke an other GDB C++ bug. */ struct nullstr nullstr; + init_ss(&ss, 1, 2); init_ss(ssa+0, 3, 4); init_ss(ssa+1, 5, 6); @@ -202,6 +207,9 @@ main () ns.null_str = "embedded\0null\0string"; ns.length = 20; + struct lazystring estring; + estring.lazy_str = "embedded x\201\202\203\204" ; + #ifdef __cplusplus S cps; diff --git a/gdb/testsuite/gdb.python/py-prettyprint.exp b/gdb/testsuite/gdb.python/py-prettyprint.exp index dfdee3a..2626895 100644 --- a/gdb/testsuite/gdb.python/py-prettyprint.exp +++ b/gdb/testsuite/gdb.python/py-prettyprint.exp @@ -102,6 +102,7 @@ proc run_lang_tests {lang} { gdb_test "print x" " = \"this is x\"" gdb_test "print cstring" " = \"const string\"" + gdb_test "print estring" "\"embedded x\\\\201\\\\202\\\\203\\\\204\"" gdb_test "print c" " = container \"container\" with 2 elements = {$nl *.0. = 23,$nl *.1. = 72$nl}" gdb_test "continue" "Program exited normally\." diff --git a/gdb/testsuite/gdb.python/py-prettyprint.py b/gdb/testsuite/gdb.python/py-prettyprint.py index 85c50aa..9a0d107 100644 --- a/gdb/testsuite/gdb.python/py-prettyprint.py +++ b/gdb/testsuite/gdb.python/py-prettyprint.py @@ -112,6 +112,18 @@ class pp_ns: def display_hint (self): return 'string' +class pp_ls: + "Print a std::basic_string of some kind" + + def __init__(self, val): + self.val = val + + def to_string(self): + return self.val['lazy_str'].lazy_string() + + def display_hint (self): + return 'string' + class pp_outer: "Print struct outer" @@ -184,6 +196,9 @@ def register_pretty_printers (): pretty_printers_dict[re.compile ('^struct ns$')] = pp_ns pretty_printers_dict[re.compile ('^ns$')] = pp_ns + pretty_printers_dict[re.compile ('^struct lazystring$')] = pp_ls + pretty_printers_dict[re.compile ('^lazystring$')] = pp_ls + pretty_printers_dict[re.compile ('^struct outerstruct$')] = pp_outer pretty_printers_dict[re.compile ('^outerstruct$')] = pp_outer diff --git a/gdb/testsuite/gdb.python/py-value.c b/gdb/testsuite/gdb.python/py-value.c index 6a5aa03..80bc1e9 100644 --- a/gdb/testsuite/gdb.python/py-value.c +++ b/gdb/testsuite/gdb.python/py-value.c @@ -53,6 +53,8 @@ main (int argc, char *argv[]) PTR x = &s; char st[17] = "divide et impera"; char nullst[17] = "divide\0et\0impera"; + const char *sptr = "pointer"; + const char *embed = "embedded x\201\202\203\204"; int a[3] = {1,2,3}; int *p = a; int i = 2; diff --git a/gdb/testsuite/gdb.python/py-value.exp b/gdb/testsuite/gdb.python/py-value.exp index 4e890ec..aa4e519 100644 --- a/gdb/testsuite/gdb.python/py-value.exp +++ b/gdb/testsuite/gdb.python/py-value.exp @@ -255,6 +255,19 @@ proc test_value_in_inferior {} { gdb_test "python print repr(nullst)" "u'divide\\\\x00et'" } +proc test_lazy_strings {} { + + global hex + + gdb_test "print sptr" "\"pointer\"" + gdb_py_test_silent_cmd "python sptr = gdb.history (0)" "Get value from history" 1 + + gdb_py_test_silent_cmd "python lstr = sptr.lazy_string()" "Aquire lazy string" 1 + gdb_test "python print lstr.type" "const char \*." "Test type name equality" + gdb_test "python print sptr.type" "const char \*." "Test type name equality" +} + + # A few objfile tests. proc test_objfiles {} { gdb_test "python\nok=False\nfor file in gdb.objfiles():\n if 'py-value' in file.filename:\n ok=True\nprint ok\nend" "True" @@ -402,6 +415,7 @@ if ![runto_main] then { } test_value_in_inferior +test_lazy_strings test_value_after_death # The following test recompiles the binary to test either C or C++ |