From dee2d5640ef06942f9a82462256a0e5d4d8ed96b Mon Sep 17 00:00:00 2001
From: pompolic <pompolic@special-circumstanc.es>
Date: Wed, 8 Sep 2021 22:25:53 +0200
Subject: [PATCH] Remove stringly typed code from ParserDecombinator

Hopefully there will be fewer incomprehensible errors now
---
 gdb-port/parser-type-instrumentation-gdb.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/gdb-port/parser-type-instrumentation-gdb.py b/gdb-port/parser-type-instrumentation-gdb.py
index 35ecd65..23fe25e 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))
-- 
GitLab