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"]
|
||||
rbImmediateMask = self.ruby_globals["RUBY_IMMEDIATE_MASK"]
|
||||
|
||||
if self.inspect_node(val):
|
||||
return
|
||||
|
||||
num = val.GetValueAsSigned()
|
||||
if num == rbFalse:
|
||||
print('false', file=self.result)
|
||||
@ -245,13 +248,45 @@ class RbInspector(LLDBInterface):
|
||||
print("T_DATA:", file=self.result)
|
||||
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()
|
||||
|
||||
# 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"]
|
||||
rbNodeTypeShift = self.ruby_globals["RUBY_NODE_TYPESHIFT"]
|
||||
|
||||
nd_type = (rval.flags & rbNodeTypeMask) >> rbNodeTypeShift
|
||||
val = val.Cast(tRNode)
|
||||
flags = val.Cast(tRNode).GetChildMemberWithName("flags").GetValueAsUnsigned()
|
||||
nd_type = (flags & rbNodeTypeMask) >> rbNodeTypeShift
|
||||
|
||||
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())
|
||||
else:
|
||||
self._append_expression("*(struct RNode *) %0#x" % val.GetValueAsUnsigned())
|
||||
|
||||
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)
|
||||
return True
|
||||
|
Loading…
x
Reference in New Issue
Block a user