[cfe-commits] r168003 - /cfe/trunk/utils/ClangDataFormat.py

Argyrios Kyrtzidis akyrtzi at gmail.com
Wed Nov 14 15:52:19 PST 2012


Author: akirtzidis
Date: Wed Nov 14 17:52:19 2012
New Revision: 168003

URL: http://llvm.org/viewvc/llvm-project?rev=168003&view=rev
Log:
[utils/ClangDataFormat.py] Add data formatter for StringRef.

Modified:
    cfe/trunk/utils/ClangDataFormat.py

Modified: cfe/trunk/utils/ClangDataFormat.py
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/ClangDataFormat.py?rev=168003&r1=168002&r2=168003&view=diff
==============================================================================
--- cfe/trunk/utils/ClangDataFormat.py (original)
+++ cfe/trunk/utils/ClangDataFormat.py Wed Nov 14 17:52:19 2012
@@ -23,10 +23,14 @@
 
 def __lldb_init_module(debugger, internal_dict):
 	debugger.HandleCommand("type summary add -F ClangDataFormat.SourceLocation_summary clang::SourceLocation")
+	debugger.HandleCommand("type summary add -F ClangDataFormat.StringRef_summary llvm::StringRef")
 
 def SourceLocation_summary(srcloc, internal_dict):
 	return SourceLocation(srcloc).summary()
 
+def StringRef_summary(strref, internal_dict):
+	return StringRef(strref).summary()
+
 class SourceLocation(object):
 	def __init__(self, srcloc):
 		self.srcloc = srcloc
@@ -51,6 +55,23 @@
 			desc = "%s (offset: %d, %s, %s)" % (self.getPrint(srcmgr_path), self.offset(), "macro" if self.isMacro() else "file", "local" if self.isLocal(srcmgr_path) else "loaded")
 		return desc
 
+class StringRef(object):
+	def __init__(self, strref):
+		self.strref = strref
+		self.Data_value = strref.GetChildAtIndex(0)
+		self.Length = strref.GetChildAtIndex(1).GetValueAsUnsigned()
+
+	def summary(self):
+		if self.Length == 0:
+			return '""'
+		data = self.Data_value.GetPointeeData(0, self.Length)
+		error = lldb.SBError()
+		string = data.ReadRawData(error, 0, data.GetByteSize())
+		if error.Fail():
+			return None
+		return '"%s"' % string
+
+
 # Key is a (function address, type name) tuple, value is the expression path for
 # an object with such a type name from inside that function.
 FramePathMapCache = {}





More information about the cfe-commits mailing list