forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			139 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
	
//===-- SWIG Interface for SBValueList --------------------------*- C++ -*-===//
 | 
						|
//
 | 
						|
//                     The LLVM Compiler Infrastructure
 | 
						|
//
 | 
						|
// This file is distributed under the University of Illinois Open Source
 | 
						|
// License. See LICENSE.TXT for details.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
namespace lldb {
 | 
						|
 | 
						|
%feature("docstring",
 | 
						|
"Represents a collection of SBValues.  Both SBFrame's GetVariables() and
 | 
						|
GetRegisters() return a SBValueList.
 | 
						|
 | 
						|
SBValueList supports SBValue iteration. For example (from test/lldbutil.py),
 | 
						|
 | 
						|
def get_registers(frame, kind):
 | 
						|
    '''Returns the registers given the frame and the kind of registers desired.
 | 
						|
 | 
						|
    Returns None if there's no such kind.
 | 
						|
    '''
 | 
						|
    registerSet = frame.GetRegisters() # Return type of SBValueList.
 | 
						|
    for value in registerSet:
 | 
						|
        if kind.lower() in value.GetName().lower():
 | 
						|
            return value
 | 
						|
 | 
						|
    return None
 | 
						|
 | 
						|
def get_GPRs(frame):
 | 
						|
    '''Returns the general purpose registers of the frame as an SBValue.
 | 
						|
 | 
						|
    The returned SBValue object is iterable.  An example:
 | 
						|
        ...
 | 
						|
        from lldbutil import get_GPRs
 | 
						|
        regs = get_GPRs(frame)
 | 
						|
        for reg in regs:
 | 
						|
            print '%s => %s' % (reg.GetName(), reg.GetValue())
 | 
						|
        ...
 | 
						|
    '''
 | 
						|
    return get_registers(frame, 'general purpose')
 | 
						|
 | 
						|
def get_FPRs(frame):
 | 
						|
    '''Returns the floating point registers of the frame as an SBValue.
 | 
						|
 | 
						|
    The returned SBValue object is iterable.  An example:
 | 
						|
        ...
 | 
						|
        from lldbutil import get_FPRs
 | 
						|
        regs = get_FPRs(frame)
 | 
						|
        for reg in regs:
 | 
						|
            print '%s => %s' % (reg.GetName(), reg.GetValue())
 | 
						|
        ...
 | 
						|
    '''
 | 
						|
    return get_registers(frame, 'floating point')
 | 
						|
 | 
						|
def get_ESRs(frame):
 | 
						|
    '''Returns the exception state registers of the frame as an SBValue.
 | 
						|
 | 
						|
    The returned SBValue object is iterable.  An example:
 | 
						|
        ...
 | 
						|
        from lldbutil import get_ESRs
 | 
						|
        regs = get_ESRs(frame)
 | 
						|
        for reg in regs:
 | 
						|
            print '%s => %s' % (reg.GetName(), reg.GetValue())
 | 
						|
        ...
 | 
						|
    '''
 | 
						|
    return get_registers(frame, 'exception state')"
 | 
						|
) SBValueList;
 | 
						|
class SBValueList
 | 
						|
{
 | 
						|
public:
 | 
						|
 | 
						|
    SBValueList ();
 | 
						|
 | 
						|
    SBValueList (const lldb::SBValueList &rhs);
 | 
						|
 | 
						|
    ~SBValueList();
 | 
						|
 | 
						|
    bool
 | 
						|
    IsValid() const;
 | 
						|
    
 | 
						|
    void 
 | 
						|
    Clear();
 | 
						|
 | 
						|
    void
 | 
						|
    Append (const lldb::SBValue &val_obj);
 | 
						|
 | 
						|
    void
 | 
						|
    Append (const lldb::SBValueList& value_list);
 | 
						|
 | 
						|
    uint32_t
 | 
						|
    GetSize() const;
 | 
						|
 | 
						|
    lldb::SBValue
 | 
						|
    GetValueAtIndex (uint32_t idx) const;
 | 
						|
 | 
						|
    lldb::SBValue
 | 
						|
    FindValueObjectByUID (lldb::user_id_t uid);
 | 
						|
    %pythoncode %{
 | 
						|
        def __len__(self):
 | 
						|
            return int(self.GetSize())
 | 
						|
 | 
						|
        def __getitem__(self, key):
 | 
						|
            count = len(self)
 | 
						|
            #------------------------------------------------------------
 | 
						|
            # Access with "int" to get Nth item in the list
 | 
						|
            #------------------------------------------------------------
 | 
						|
            if type(key) is int:
 | 
						|
                if key < count:
 | 
						|
                    return self.GetValueAtIndex(key)
 | 
						|
            #------------------------------------------------------------
 | 
						|
            # Access with "str" to get values by name
 | 
						|
            #------------------------------------------------------------
 | 
						|
            elif type(key) is str:
 | 
						|
                matches = []
 | 
						|
                for idx in range(count):
 | 
						|
                    value = self.GetValueAtIndex(idx)
 | 
						|
                    if value.name == key:
 | 
						|
                        matches.append(value)
 | 
						|
                return matches
 | 
						|
            #------------------------------------------------------------
 | 
						|
            # Match with regex
 | 
						|
            #------------------------------------------------------------
 | 
						|
            elif isinstance(key, type(re.compile('.'))):
 | 
						|
                matches = []
 | 
						|
                for idx in range(count):
 | 
						|
                    value = self.GetValueAtIndex(idx)
 | 
						|
                    re_match = key.search(value.name)
 | 
						|
                    if re_match:
 | 
						|
                        matches.append(value)
 | 
						|
                return matches
 | 
						|
 | 
						|
    %}
 | 
						|
 | 
						|
 | 
						|
};
 | 
						|
 | 
						|
} // namespace lldb
 |