Fix dump of NODE [ci skip]
This commit is contained in:
parent
5111b3d479
commit
d076101af9
@ -60,6 +60,9 @@ class RbInspector(LLDBInterface):
|
|||||||
rbUndef = self.ruby_globals["RUBY_Qundef"]
|
rbUndef = self.ruby_globals["RUBY_Qundef"]
|
||||||
rbImmediateMask = self.ruby_globals["RUBY_IMMEDIATE_MASK"]
|
rbImmediateMask = self.ruby_globals["RUBY_IMMEDIATE_MASK"]
|
||||||
|
|
||||||
|
if self.inspect_node(val):
|
||||||
|
return
|
||||||
|
|
||||||
num = val.GetValueAsSigned()
|
num = val.GetValueAsSigned()
|
||||||
if num == rbFalse:
|
if num == rbFalse:
|
||||||
print('false', file=self.result)
|
print('false', file=self.result)
|
||||||
@ -245,13 +248,45 @@ class RbInspector(LLDBInterface):
|
|||||||
print("T_DATA:", file=self.result)
|
print("T_DATA:", file=self.result)
|
||||||
self._append_expression("*(struct RData *) %0#x" % val.GetValueAsUnsigned())
|
self._append_expression("*(struct RData *) %0#x" % val.GetValueAsUnsigned())
|
||||||
|
|
||||||
elif rval.is_type("RUBY_T_NODE"):
|
elif rval.is_type("RUBY_T_IMEMO"):
|
||||||
|
imemo_type = ((rval.flags >> self.ruby_globals["RUBY_FL_USHIFT"])
|
||||||
|
& IMEMO_MASK)
|
||||||
|
print("T_IMEMO: ", file=self.result)
|
||||||
|
|
||||||
|
self._append_expression("(enum imemo_type) %d" % imemo_type)
|
||||||
|
self._append_expression("*(struct MEMO *) %0#x" % val.GetValueAsUnsigned())
|
||||||
|
|
||||||
|
elif rval.is_type("RUBY_T_FILE"):
|
||||||
|
self.generic_inspect(val, "RFile")
|
||||||
|
|
||||||
|
elif rval.is_type("RUBY_T_MOVED"):
|
||||||
|
self.generic_inspect(val, "RMoved")
|
||||||
|
|
||||||
|
elif rval.is_type("RUBY_T_MATCH"):
|
||||||
|
self.generic_inspect(val, "RMatch")
|
||||||
|
|
||||||
|
elif rval.is_type("RUBY_T_STRUCT"):
|
||||||
|
self.generic_inspect(val, "RStruct")
|
||||||
|
|
||||||
|
elif rval.is_type("RUBY_T_ZOMBIE"):
|
||||||
|
self.generic_inspect(val, "RZombie")
|
||||||
|
|
||||||
|
else:
|
||||||
|
print("Not-handled type %0#x" % rval.type, file=self.result)
|
||||||
|
print(val, file=self.result)
|
||||||
|
|
||||||
|
def inspect_node(self, val):
|
||||||
tRNode = self.target.FindFirstType("struct RNode").GetPointerType()
|
tRNode = self.target.FindFirstType("struct RNode").GetPointerType()
|
||||||
|
|
||||||
|
# if val.GetType() != tRNode: does not work for unknown reason
|
||||||
|
|
||||||
|
if val.GetType().GetPointeeType().name != "NODE":
|
||||||
|
return False
|
||||||
|
|
||||||
rbNodeTypeMask = self.ruby_globals["RUBY_NODE_TYPEMASK"]
|
rbNodeTypeMask = self.ruby_globals["RUBY_NODE_TYPEMASK"]
|
||||||
rbNodeTypeShift = self.ruby_globals["RUBY_NODE_TYPESHIFT"]
|
rbNodeTypeShift = self.ruby_globals["RUBY_NODE_TYPESHIFT"]
|
||||||
|
flags = val.Cast(tRNode).GetChildMemberWithName("flags").GetValueAsUnsigned()
|
||||||
nd_type = (rval.flags & rbNodeTypeMask) >> rbNodeTypeShift
|
nd_type = (flags & rbNodeTypeMask) >> rbNodeTypeShift
|
||||||
val = val.Cast(tRNode)
|
|
||||||
|
|
||||||
self._append_expression("(node_type) %d" % nd_type)
|
self._append_expression("(node_type) %d" % nd_type)
|
||||||
|
|
||||||
@ -465,30 +500,4 @@ class RbInspector(LLDBInterface):
|
|||||||
self._append_expression("*(struct RNode_FILE *) %0#x" % val.GetValueAsUnsigned())
|
self._append_expression("*(struct RNode_FILE *) %0#x" % val.GetValueAsUnsigned())
|
||||||
else:
|
else:
|
||||||
self._append_expression("*(struct RNode *) %0#x" % val.GetValueAsUnsigned())
|
self._append_expression("*(struct RNode *) %0#x" % val.GetValueAsUnsigned())
|
||||||
|
return True
|
||||||
elif rval.is_type("RUBY_T_IMEMO"):
|
|
||||||
imemo_type = ((rval.flags >> self.ruby_globals["RUBY_FL_USHIFT"])
|
|
||||||
& IMEMO_MASK)
|
|
||||||
print("T_IMEMO: ", file=self.result)
|
|
||||||
|
|
||||||
self._append_expression("(enum imemo_type) %d" % imemo_type)
|
|
||||||
self._append_expression("*(struct MEMO *) %0#x" % val.GetValueAsUnsigned())
|
|
||||||
|
|
||||||
elif rval.is_type("RUBY_T_FILE"):
|
|
||||||
self.generic_inspect(val, "RFile")
|
|
||||||
|
|
||||||
elif rval.is_type("RUBY_T_MOVED"):
|
|
||||||
self.generic_inspect(val, "RMoved")
|
|
||||||
|
|
||||||
elif rval.is_type("RUBY_T_MATCH"):
|
|
||||||
self.generic_inspect(val, "RMatch")
|
|
||||||
|
|
||||||
elif rval.is_type("RUBY_T_STRUCT"):
|
|
||||||
self.generic_inspect(val, "RStruct")
|
|
||||||
|
|
||||||
elif rval.is_type("RUBY_T_ZOMBIE"):
|
|
||||||
self.generic_inspect(val, "RZombie")
|
|
||||||
|
|
||||||
else:
|
|
||||||
print("Not-handled type %0#x" % rval.type, file=self.result)
|
|
||||||
print(val, file=self.result)
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user