diff --git a/gdb-port/parser-type-instrumentation-gdb.py b/gdb-port/parser-type-instrumentation-gdb.py index 35ecd65f8f9b105a045a263f786943b44bc2b501..23fe25eebbf9432d5226cd0b0e92bb3204f310ac 100644 --- a/gdb-port/parser-type-instrumentation-gdb.py +++ b/gdb-port/parser-type-instrumentation-gdb.py @@ -692,12 +692,12 @@ class ParserDecombinator: self.vt_types = vt_types def decompose_parser(self, parser, top_level_parse): - # Sadly, this is stringly typed for now - # TODO: use gdb.Value! + hparser_t = gdb.lookup_type("HParser") + hparser_p_t = hparser_t.pointer() parser_addr = parser.address - vtable_p = gdb.parse_and_eval("((HParser*) " + str(parser_addr) + ")->vtable") + vtable_p = gdb.Value(parser_addr).cast(hparser_p_t).dereference()['vtable'] try: - vtable_sym = self.vt_types.lookup_by_address(vtable_p) + vtable_sym = self.vt_types.lookup_by_address(vtable_p) # TODO: rework lookup to use gdb.Values envClass = vtable_to_env[vtable_sym.name] except KeyError: print("Unknown vtable: " + str(vtable_p))