From 92603bbd6996000d2541edb22e0b2ecac646c3de Mon Sep 17 00:00:00 2001 From: Matt Valentine-House Date: Thu, 18 Aug 2022 11:44:25 +0100 Subject: [ci skip][Feature #18910][lldb] Dedup lldb_init by moving it fully into RbBaseCommand --- misc/lldb_rb/rb_base_command.py | 55 +++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 27 deletions(-) (limited to 'misc/lldb_rb') diff --git a/misc/lldb_rb/rb_base_command.py b/misc/lldb_rb/rb_base_command.py index 44b2996d80..bf98b67612 100644 --- a/misc/lldb_rb/rb_base_command.py +++ b/misc/lldb_rb/rb_base_command.py @@ -8,12 +8,39 @@ class RbBaseCommand: command = f"command script add -c {module_name}.{cls.__name__} {cls.program}" debugger.HandleCommand(command) + @classmethod + def lldb_init(cls, debugger): + target = debugger.GetSelectedTarget() + global SIZEOF_VALUE + SIZEOF_VALUE = target.FindFirstType("VALUE").GetByteSize() + + value_types = [] + g = globals() + + imemo_types = target.FindFirstType("enum imemo_type") + + for member in imemo_types.GetEnumMembers(): + g[member.GetName()] = member.GetValueAsUnsigned() + + for enum in target.FindFirstGlobalVariable("ruby_dummy_gdb_enums"): + enum = enum.GetType() + members = enum.GetEnumMembers() + for i in range(0, members.GetSize()): + member = members.GetTypeEnumMemberAtIndex(i) + name = member.GetName() + value = member.GetValueAsUnsigned() + g[name] = value + + if name.startswith("RUBY_T_"): + value_types.append(name) + g["value_types"] = value_types + def __init__(self, debugger, _internal_dict): self.internal_dict = _internal_dict def __call__(self, debugger, command, exe_ctx, result): if not ("RUBY_Qfalse" in globals()): - self._lldb_init(debugger) + RbBaseCommand.lldb_init(debugger) self.build_environment(debugger) self.call(debugger, command, exe_ctx, result) @@ -40,29 +67,3 @@ class RbBaseCommand: result.Clear() result.write(output1) result.write(output2) - - def _lldb_init(self, debugger): - target = debugger.GetSelectedTarget() - global SIZEOF_VALUE - SIZEOF_VALUE = target.FindFirstType("VALUE").GetByteSize() - - value_types = [] - g = globals() - - imemo_types = target.FindFirstType("enum imemo_type") - - for member in imemo_types.GetEnumMembers(): - g[member.GetName()] = member.GetValueAsUnsigned() - - for enum in target.FindFirstGlobalVariable("ruby_dummy_gdb_enums"): - enum = enum.GetType() - members = enum.GetEnumMembers() - for i in range(0, members.GetSize()): - member = members.GetTypeEnumMemberAtIndex(i) - name = member.GetName() - value = member.GetValueAsUnsigned() - g[name] = value - - if name.startswith("RUBY_T_"): - value_types.append(name) - g["value_types"] = value_types -- cgit v1.2.3