diff options
author | Tom Tromey <tromey@redhat.com> | 2012-11-12 17:41:59 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2012-11-12 17:41:59 +0000 |
commit | 18a9fc1261b8a654fe6db7eea7e60b0c59296d96 (patch) | |
tree | 50b1290ab9827f259ea103cf50367d7ac6c0e878 /gdb/testsuite | |
parent | bd69fc683f383772bb8fab43c5d4af8d0cd4a8b4 (diff) | |
download | gdb-18a9fc1261b8a654fe6db7eea7e60b0c59296d96.zip gdb-18a9fc1261b8a654fe6db7eea7e60b0c59296d96.tar.gz gdb-18a9fc1261b8a654fe6db7eea7e60b0c59296d96.tar.bz2 |
* NEWS: Update.
* data-directory/Makefile.in (PYTHON_FILES): Add
type_printers.py.
* python/lib/gdb/command/type_printers.py: New file.
* python/lib/gdb/command/types.py (TypePrinter): New class.
(_get_some_type_recognizers, get_type_recognizers,
apply_type_recognizers, register_type_printer): New
functions.
* python/py-objfile.c (objfile_object) <type_printers>: New
field.
(objfpy_dealloc): Decref new field.
(objfpy_new): Set new field.
(objfpy_get_type_printers, objfpy_set_type_printers): New
functions.
(objfile_to_objfile_object): Set new field.
(objfile_getset): Add "type_printers".
* python/py-progspace.c (pspace_object) <type_printers>: New
field.
(pspy_dealloc): Decref new field.
(pspy_new): Set new field.
(pspy_get_type_printers, pspy_set_type_printers): New functions.
(pspace_to_pspace_object): Set new field.
(pspace_getset): Add "type_printers".
* python/python.c (start_type_printers, apply_type_printers,
free_type_printers): New functions.
(_initialize_python): Set gdb.type_printers.
* python/python.h (start_type_printers, apply_type_printers,
free_type_printers): Declare.
* typeprint.c (type_print_raw_options, default_ptype_flags):
Update for new fields.
(do_free_global_table, create_global_typedef_table,
find_global_typedef): New functions.
(find_typedef_in_hash): Use find_global_typedef.
(whatis_exp): Use create_global_typedef_table. Change cleanup
handling.
* typeprint.h (struct type_print_options) <global_typedefs,
global_printers>: New fields.
doc
* gdb.texinfo (Symbols): Document "info type-printers",
"enable type-printer" and "disable type-printer".
(Python API): Add new node to menu.
(Type Printing API): New node.
(Progspaces In Python): Document type_printers field.
(Objfiles In Python): Likewise.
(gdb.types) <get_type_recognizers, apply_type_recognizers,
register_type_printer, TypePrinter>: Document.
testsuite
* gdb.base/completion.exp: Update for "info type-printers".
* gdb.python/py-typeprint.cc: New file.
* gdb.python/py-typeprint.exp: New file.
* gdb.python/py-typeprint.py: New file.
Diffstat (limited to 'gdb/testsuite')
-rw-r--r-- | gdb/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/completion.exp | 6 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-typeprint.cc | 37 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-typeprint.exp | 53 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-typeprint.py | 35 |
5 files changed, 135 insertions, 3 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 9e04326..5293c88 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,12 @@ 2012-11-12 Tom Tromey <tromey@redhat.com> + * gdb.base/completion.exp: Update for "info type-printers". + * gdb.python/py-typeprint.cc: New file. + * gdb.python/py-typeprint.exp: New file. + * gdb.python/py-typeprint.py: New file. + +2012-11-12 Tom Tromey <tromey@redhat.com> + * gdb.base/call-sc.exp: Use "ptype/r". * gdb.base/volatile.exp: Don't expect "int". * gdb.cp/ptype-flags.cc: New file. diff --git a/gdb/testsuite/gdb.base/completion.exp b/gdb/testsuite/gdb.base/completion.exp index ccdc199..8b1facb 100644 --- a/gdb/testsuite/gdb.base/completion.exp +++ b/gdb/testsuite/gdb.base/completion.exp @@ -161,7 +161,7 @@ gdb_test_multiple "" "$test" { -re "^info t foo\\\x07$" { send_gdb "\n" gdb_test_multiple "" "$test" { - -re "Ambiguous info command \"t foo\": target, tasks, terminal, threads, tp, tracepoints, tvariables, types\\..*$gdb_prompt $" { + -re "Ambiguous info command \"t foo\": target, tasks, terminal, threads, tp, tracepoints, tvariables, (type-printers, )?types\\..*$gdb_prompt $" { pass "$test" } } @@ -174,7 +174,7 @@ gdb_test_multiple "" "$test" { -re "^info t\\\x07$" { send_gdb "\n" gdb_test_multiple "" "$test" { - -re "Ambiguous info command \"t\": target, tasks, terminal, threads, tp, tracepoints, tvariables, types\\..*$gdb_prompt $" { + -re "Ambiguous info command \"t\": target, tasks, terminal, threads, tp, tracepoints, tvariables, (type-printers, )?types\\..*$gdb_prompt $" { pass "$test" } } @@ -187,7 +187,7 @@ gdb_test_multiple "" "$test" { -re "^info t \\\x07$" { send_gdb "\n" gdb_test_multiple "" "$test" { - -re "Ambiguous info command \"t \": target, tasks, terminal, threads, tp, tracepoints, tvariables, types\\..*$gdb_prompt $" { + -re "Ambiguous info command \"t \": target, tasks, terminal, threads, tp, tracepoints, tvariables, (type-printers, )?types\\..*$gdb_prompt $" { pass "$test" } } diff --git a/gdb/testsuite/gdb.python/py-typeprint.cc b/gdb/testsuite/gdb.python/py-typeprint.cc new file mode 100644 index 0000000..65c06f0 --- /dev/null +++ b/gdb/testsuite/gdb.python/py-typeprint.cc @@ -0,0 +1,37 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2008-2012 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +class basic_string +{ +}; + +template<typename T> +class templ +{ +public: + T x; + templ<T> *value; +}; + +templ<basic_string> s; + +basic_string bs; + +int main() +{ + return 0; +} diff --git a/gdb/testsuite/gdb.python/py-typeprint.exp b/gdb/testsuite/gdb.python/py-typeprint.exp new file mode 100644 index 0000000..ef07055 --- /dev/null +++ b/gdb/testsuite/gdb.python/py-typeprint.exp @@ -0,0 +1,53 @@ +# Copyright (C) 2012 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +if { [skip_cplus_tests] } { continue } + +load_lib gdb-python.exp +load_lib cp-support.exp + +standard_testfile .cc + +if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} { + return -1 +} + +if { [skip_python_tests] } { continue } + +set remote_python_file [remote_download host ${srcdir}/${subdir}/${testfile}.py] + +gdb_test_no_output "python execfile ('${remote_python_file}')" + +cp_test_ptype_class s "basic test" "class" "templ<string>" { + { field public "T x;" } + { field public "templ<T> *value;" } +} "" {} "" + +cp_test_ptype_class s "raw test" "class" "templ<basic_string>" { + { field public "basic_string x;" } + { field public "templ<basic_string> *value;" } +} "" {} "/r" + +gdb_test_no_output "disable type-printer string" +gdb_test "whatis bs" "basic_string" "whatis with disabled printer" + +gdb_test "info type-printers" "Global type printers:.*string.*disabled.*" + +gdb_test_no_output "enable type-printer string" +gdb_test "whatis bs" "string" "whatis with enabled printer" + +gdb_test "whatis s" "templ<string>" + +remote_file host delete ${remote_python_file} diff --git a/gdb/testsuite/gdb.python/py-typeprint.py b/gdb/testsuite/gdb.python/py-typeprint.py new file mode 100644 index 0000000..a4351cd --- /dev/null +++ b/gdb/testsuite/gdb.python/py-typeprint.py @@ -0,0 +1,35 @@ +# Copyright (C) 2012 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +import gdb + +class Recognizer(object): + def __init__(self): + self.enabled = True + + def recognize(self, type_obj): + if type_obj.tag == 'basic_string': + return 'string' + return None + +class StringTypePrinter(object): + def __init__(self): + self.name = 'string' + self.enabled = True + + def instantiate(self): + return Recognizer() + +gdb.type_printers.append(StringTypePrinter()) |