def mk__aggreg_ppObj(v, aboutTag=''): aboutStr = mk_aboutStr(aboutTag) ppClass = _stl_containers.getPP(v.type) if not ppClass: ppClass = _stl_utilities.getPP(v.type) if ppClass and not issubclass(ppClass, AggregatePP): tStr = impl__type_nameOnly(v.type) _common.die('%sType =[=%s=]= is not an aggregate.' % (aboutStr, tStr)) if not ppClass: tStr = impl__type_nameOnly(v.type) _common.die('%sType =[=%s=]= is not an applicable type.' % (aboutStr, tStr)) return ppClass(v)
def mk__indirector_ppObj(v, aboutTag=''): aboutStr = mk_aboutStr(aboutTag) ppClass = _stl_iterators.getPP(v.type) if not ppClass: ppClass = _stl_utilities.getPP(v.type) if ppClass and not issubclass(ppClass, IndirectorPP): tStr = impl__type_nameOnly(v.type) _common.die('%sType =[=%s=]= is neither iterator nor smart pointer.' % (aboutStr, tStr)) if not ppClass: tStr = impl__type_nameOnly(v.type) _common.die('%sType =[=%s=]= is not an applicable type.' % (aboutStr, tStr)) return ppClass(v)
def invoke(self, argsAsOneString, isFromTTY): s = prep__single_nonValue_string(argsAsOneString) try: t = gdb.lookup_type(s) tNamePrecis = impl__type_nameOnly(t) printf__toStdout('%s\n', tNamePrecis) except BaseException as e: _common.die('Cannot discern a type from input.')
def mk__iter_ppObj(v, aboutTag=''): aboutStr = mk_aboutStr(aboutTag) iterHusk = _stl_iterators.unwrap_iteratorValue(v) v_using = nonNull(iterHusk.coreValue, v) (ppClass, dummy) = _stl_iterators.getPP(v_using.type, try__unwrapType=False) if not ppClass: tStr = impl__type_nameOnly(v.type) _common.die('%sType =[=%s=]= is not an iterator.' % (aboutStr, tStr)) return ppClass(v_using)
def prep__aggregObj_and_lookupBy(argsAsOneString, lookupBy_key_only=False): from _common import stripEnclosing_quoteMarks argv = gdb.string_to_argv(argsAsOneString) assertArity(argv, 2) lookupBy = stripEnclosing_quoteMarks(argv[-1]) aggreg_v = gdb.parse_and_eval(argv[-2]) aggreg_ppObj = mk__aggreg_ppObj(aggreg_v, 'first arg') if lookupBy_key_only and not isinstance(aggreg_ppObj, AssociativePP): _common.die( '%sType =[=%s=]= does not support key lookup.' % (mk_aboutStr('first arg'), impl__type_nameOnly(aggreg_v.type))) return (aggreg_ppObj, lookupBy)
def mk__anyRecognized_ppObj(v): import _pp_base_classes from _common import gdbType_to_ppClass # We shall unwrap the iterator (if iterator) ourselves later; # because we need to unwrap *value*, and gdbType_to_ppClass() # calls _stl_iterators.getPP() which calls unwrap_iteratorType(). (ppClass, dummy) = _common.gdbType_to_ppClass(v.type, True) if not ppClass: tStr = impl__type_nameOnly(v.type) _common.die('Type =[=%s=]= is not a supported STL type.' % (tStr)) if issubclass(ppClass, _pp_base_classes.IteratorPP): iterHusk = unwrap_iteratorValue(v) if iterHusk.coreType != None: (ppClass_other, dummy) = _stl_iterators.getPP(iterHusk.coreType, False) ppObj = ppClass_other(iterHusk.coreValue) if iterHusk.any_moveWrappers: ppObj.noteMisc('std::move_iterator adapter wrapped.') if iterHusk.any_reverseWrappers: ppObj.noteMisc('std::reverse_iterator adapter wrapped.') return ppObj # ppObj = ppClass(v) return ppObj
def invoke(self, argsAsOneString, isFromTTY): someObj_v = prep__single_gdbValue(argsAsOneString) tNamePrecis = impl__type_nameOnly(someObj_v.type) printf__toStdout('type = %s\n', tNamePrecis) # Just like GDB's own "whatis".