17 """Utilities for working with gdb.Types.""" 23 """Return the "basic" type of a type. 26 type_: The type to reduce to its basic type. 29 type_ with const/volatile is stripped away, 30 and typedefs/references converted to the underlying type. 33 while (type_.code == gdb.TYPE_CODE_REF
or 34 type_.code == gdb.TYPE_CODE_RVALUE_REF
or 35 type_.code == gdb.TYPE_CODE_TYPEDEF):
36 if (type_.code == gdb.TYPE_CODE_REF
or 37 type_.code == gdb.TYPE_CODE_RVALUE_REF):
38 type_ = type_.target()
40 type_ = type_.strip_typedefs()
41 return type_.unqualified()
45 """Return True if a type has the specified field. 48 type_: The type to examine. 49 It must be one of gdb.TYPE_CODE_STRUCT, gdb.TYPE_CODE_UNION. 50 field: The name of the field to look up. 53 True if the field is present either in type_ or any baseclass. 56 TypeError: The type is not a struct or union. 60 if (type_.code != gdb.TYPE_CODE_STRUCT
and 61 type_.code != gdb.TYPE_CODE_UNION):
62 raise TypeError(
"not a struct or union")
63 for f
in type_.fields():
75 """Return a dictionary from a program's enum type. 78 enum_type: The enum to compute the dictionary for. 81 The dictionary of the enum. 84 TypeError: The type is not an enum. 87 if enum_type.code != gdb.TYPE_CODE_ENUM:
88 raise TypeError(
"not an enum type")
90 for field
in enum_type.fields():
92 enum_dict[field.name] = field.enumval
97 """Return an iterator that recursively traverses anonymous fields. 100 type_: The type to traverse. It should be one of 101 gdb.TYPE_CODE_STRUCT or gdb.TYPE_CODE_UNION. 104 an iterator similar to gdb.Type.iteritems(), i.e., it returns 105 pairs of key, value, but for any anonymous struct or union 106 field that field is traversed recursively, depth-first. 108 for k, v
in type_.iteritems ():
112 for i
in deep_items (v.type):
116 """The base class for type printers. 118 Instances of this type can be used to substitute type names during 121 A type printer must have at least 'name' and 'enabled' attributes, 122 and supply an 'instantiate' method. 124 The 'instantiate' method must either return None, or return an 125 object which has a 'recognize' method. This method must accept a 126 gdb.Type argument and either return None, meaning that the type 127 was not recognized, or a string naming the type. 139 for printer
in plist:
141 inst = printer.instantiate()
147 "Return a list of the enabled type recognizers for the current context." 151 for objfile
in gdb.objfiles():
161 """Apply the given list of type recognizers to the type TYPE_OBJ. 162 If any recognizer in the list recognizes TYPE_OBJ, returns the name 163 given by the recognizer. Otherwise, this returns None.""" 164 for r
in recognizers:
165 result = r.recognize(type_obj)
166 if result
is not None:
171 """Register a type printer. 172 PRINTER is the type printer instance. 173 LOCUS is either an objfile, a program space, or None, indicating 174 global registration.""" 178 locus.type_printers.insert(0, printer)
def get_basic_type(type_)
def register_type_printer(locus, printer)
def make_enum_dict(enum_type)
def has_field(type_, field)
def _get_some_type_recognizers(result, plist)
def apply_type_recognizers(recognizers, type_obj)
def get_type_recognizers()