py-section-script.py revision 1.1.1.7
1# Copyright (C) 2010-2019 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 20class pp_ss: 21 def __init__(self, val): 22 self.val = val 23 24 def to_string(self): 25 return "a=<" + str(self.val["a"]) + "> b=<" + str(self.val["b"]) + ">" 26 27def lookup_function (val): 28 "Look-up and return a pretty-printer that can print val." 29 30 # Get the type. 31 type = val.type 32 33 # If it points to a reference, get the reference. 34 if type.code == gdb.TYPE_CODE_REF: 35 type = type.target () 36 37 # Get the unqualified type, stripped of typedefs. 38 type = type.unqualified ().strip_typedefs () 39 40 # Get the type name. 41 typename = type.tag 42 43 if typename == None: 44 return None 45 46 # Iterate over local dictionary of types to determine 47 # if a printer is registered for that type. Return an 48 # instantiation of the printer if found. 49 for function in pretty_printers_dict: 50 if function.match (typename): 51 return pretty_printers_dict[function] (val) 52 53 # Cannot find a pretty printer. Return None. 54 55 return None 56 57def register_pretty_printers (): 58 pretty_printers_dict[re.compile ('^ss$')] = pp_ss 59 60pretty_printers_dict = {} 61 62register_pretty_printers () 63gdb.current_progspace().pretty_printers.append (lookup_function) 64