Example #1
0
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)
Example #2
0
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)
Example #3
0
 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.')
Example #4
0
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)
Example #5
0
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)
Example #6
0
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
Example #7
0
 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".