mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-06-02 08:41:34 +00:00
71 lines
2.1 KiB
Python
71 lines
2.1 KiB
Python
def format_char(c):
|
|
if c == 0:
|
|
return "\\0"
|
|
elif c == 0x07:
|
|
return "\\a"
|
|
elif c == 0x08:
|
|
return "\\b"
|
|
elif c == 0x0c:
|
|
return "\\f"
|
|
elif c == 0x0a:
|
|
return "\\n"
|
|
elif c == 0x0d:
|
|
return "\\r"
|
|
elif c == 0x09:
|
|
return "\\t"
|
|
elif c == 0x0b:
|
|
return "\\v"
|
|
elif c == 0x5c:
|
|
return "\\"
|
|
elif c == 0x22:
|
|
return "\\\""
|
|
elif c == 0x27:
|
|
return "\\'"
|
|
elif c < 0x20 or c >= 0x80 and c <= 0xff:
|
|
return "\\x%02x" % c
|
|
elif c >= 0x0100:
|
|
return "\\u%04x" % c
|
|
else:
|
|
return chr(c)
|
|
|
|
# Take an SBValue that is either a char* or char16_t* and formats it like lldb
|
|
# would when printing it.
|
|
def format_string(lldb_value, length=100):
|
|
ptr = lldb_value.GetValueAsUnsigned(0)
|
|
char_type = lldb_value.GetType().GetPointeeType()
|
|
if char_type.GetByteSize() == 1:
|
|
s = "\""
|
|
size = 1
|
|
mask = 0xff
|
|
elif char_type.GetByteSize() == 2:
|
|
s = "u\""
|
|
size = 2
|
|
mask = 0xffff
|
|
else:
|
|
return "(cannot format string with char type %s)" % char_type.GetName()
|
|
i = 0
|
|
terminated = False
|
|
while i < length:
|
|
c = lldb_value.CreateValueFromAddress("x", ptr + i * size, char_type).GetValueAsUnsigned(0) & mask
|
|
if c == 0:
|
|
terminated = True
|
|
break
|
|
s += format_char(c)
|
|
i = i + 1
|
|
s += "\""
|
|
if not terminated and i != length:
|
|
s += "..."
|
|
return s
|
|
|
|
# Dereferences a raw pointer, nsCOMPtr, RefPtr, nsAutoPtr, already_AddRefed or
|
|
# mozilla::RefPtr; otherwise returns the value unchanged.
|
|
def dereference(lldb_value):
|
|
if lldb_value.TypeIsPointerType():
|
|
return lldb_value.Dereference()
|
|
name = lldb_value.GetType().GetUnqualifiedType().GetName()
|
|
if name.startswith("nsCOMPtr<") or name.startswith("RefPtr<") or name.startswith("nsAutoPtr<") or name.startswith("already_AddRefed<"):
|
|
return lldb_value.GetChildMemberWithName("mRawPtr")
|
|
if name.startswith("mozilla::RefPtr<"):
|
|
return lldb_value.GetChildMemberWithName("ptr")
|
|
return lldb_value
|