1# Copyright (C) 2010-2023 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16# This file is part of the GDB testsuite. 17 18import re 19 20 21class pp_ss: 22 def __init__(self, val): 23 self.val = val 24 25 def to_string(self): 26 return "a=<" + str(self.val["a"]) + "> b=<" + str(self.val["b"]) + ">" 27 28 29def lookup_function(val): 30 "Look-up and return a pretty-printer that can print val." 31 32 # Get the type. 33 type = val.type 34 35 # If it points to a reference, get the reference. 36 if type.code == gdb.TYPE_CODE_REF: 37 type = type.target() 38 39 # Get the unqualified type, stripped of typedefs. 40 type = type.unqualified().strip_typedefs() 41 42 # Get the type name. 43 typename = type.tag 44 45 if typename is None: 46 return None 47 48 # Iterate over local dictionary of types to determine 49 # if a printer is registered for that type. Return an 50 # instantiation of the printer if found. 51 for function in pretty_printers_dict: 52 if function.match(typename): 53 return pretty_printers_dict[function](val) 54 55 # Cannot find a pretty printer. Return None. 56 57 return None 58 59 60def register_pretty_printers(): 61 pretty_printers_dict[re.compile("^ss$")] = pp_ss 62 63 64pretty_printers_dict = {} 65 66register_pretty_printers() 67gdb.current_progspace().pretty_printers.append(lookup_function) 68