]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/python/lib/gdb/command/type_printers.py
Update year range in copyright notice of all files owned by the GDB project.
[thirdparty/binutils-gdb.git] / gdb / python / lib / gdb / command / type_printers.py
CommitLineData
18a9fc12 1# Type printer commands.
32d0add0 2# Copyright (C) 2010-2015 Free Software Foundation, Inc.
18a9fc12
TT
3
4# This program is free software; you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by
6# the Free Software Foundation; either version 3 of the License, or
7# (at your option) any later version.
8#
9# This program is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12# GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License
15# along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17import copy
18import gdb
19
20"""GDB commands for working with type-printers."""
21
22class InfoTypePrinter(gdb.Command):
23 """GDB command to list all registered type-printers.
24
25 Usage: info type-printers
26 """
27
28 def __init__ (self):
29 super(InfoTypePrinter, self).__init__("info type-printers",
30 gdb.COMMAND_DATA)
31
32 def list_type_printers(self, type_printers):
33 """Print a list of type printers."""
34 # A potential enhancement is to provide an option to list printers in
35 # "lookup order" (i.e. unsorted).
9a27f2c6
PK
36 sorted_type_printers = sorted (copy.copy(type_printers),
37 key = lambda x: x.name)
18a9fc12
TT
38 for printer in sorted_type_printers:
39 if printer.enabled:
40 enabled = ''
41 else:
42 enabled = " [disabled]"
9a27f2c6 43 print (" %s%s" % (printer.name, enabled))
18a9fc12
TT
44
45 def invoke(self, arg, from_tty):
46 """GDB calls this to perform the command."""
47 sep = ''
48 for objfile in gdb.objfiles():
49 if objfile.type_printers:
9a27f2c6 50 print ("%sType printers for %s:" % (sep, objfile.name))
18a9fc12
TT
51 self.list_type_printers(objfile.type_printers)
52 sep = '\n'
53 if gdb.current_progspace().type_printers:
9a27f2c6 54 print ("%sType printers for program space:" % sep)
18a9fc12
TT
55 self.list_type_printers(gdb.current_progspace().type_printers)
56 sep = '\n'
57 if gdb.type_printers:
9a27f2c6 58 print ("%sGlobal type printers:" % sep)
18a9fc12
TT
59 self.list_type_printers(gdb.type_printers)
60
61class _EnableOrDisableCommand(gdb.Command):
62 def __init__(self, setting, name):
63 super(_EnableOrDisableCommand, self).__init__(name, gdb.COMMAND_DATA)
64 self.setting = setting
65
66 def set_some(self, name, printers):
67 result = False
68 for p in printers:
69 if name == p.name:
70 p.enabled = self.setting
71 result = True
72 return result
73
74 def invoke(self, arg, from_tty):
75 """GDB calls this to perform the command."""
76 for name in arg.split():
77 ok = False
78 for objfile in gdb.objfiles():
79 if self.set_some(name, objfile.type_printers):
80 ok = True
81 if self.set_some(name, gdb.current_progspace().type_printers):
82 ok = True
83 if self.set_some(name, gdb.type_printers):
84 ok = True
85 if not ok:
9a27f2c6 86 print ("No type printer named '%s'" % name)
18a9fc12
TT
87
88 def add_some(self, result, word, printers):
89 for p in printers:
90 if p.name.startswith(word):
91 result.append(p.name)
92
93 def complete(self, text, word):
94 result = []
95 for objfile in gdb.objfiles():
96 self.add_some(result, word, objfile.type_printers)
97 self.add_some(result, word, gdb.current_progspace().type_printers)
98 self.add_some(result, word, gdb.type_printers)
99 return result
100
101class EnableTypePrinter(_EnableOrDisableCommand):
102 """GDB command to enable the specified type printer.
103
104 Usage: enable type-printer NAME
105
106 NAME is the name of the type-printer.
107 """
108
109 def __init__(self):
110 super(EnableTypePrinter, self).__init__(True, "enable type-printer")
111
112class DisableTypePrinter(_EnableOrDisableCommand):
113 """GDB command to disable the specified type-printer.
114
115 Usage: disable type-printer NAME
116
117 NAME is the name of the type-printer.
118 """
119
120 def __init__(self):
121 super(DisableTypePrinter, self).__init__(False, "disable type-printer")
122
123InfoTypePrinter()
124EnableTypePrinter()
125DisableTypePrinter()