From 097e793c353327228816f5269388eea08a1458aa Mon Sep 17 00:00:00 2001
From: pompolic <pompolic@special-circumstanc.es>
Date: Thu, 24 Jun 2021 22:36:08 +0200
Subject: [PATCH] WIP commit

---
 gdb-port/parser-type-instrumentation-gdb.py | 22 +++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/gdb-port/parser-type-instrumentation-gdb.py b/gdb-port/parser-type-instrumentation-gdb.py
index b6d7a30..faf5bec 100644
--- a/gdb-port/parser-type-instrumentation-gdb.py
+++ b/gdb-port/parser-type-instrumentation-gdb.py
@@ -10,6 +10,27 @@ parser_name_defaults = {
 	#...
 }
 
+class HParserEnv:
+	def __init__(self, parser, top_level_parse):
+		print("HParserEnv constructed") # DEBUG
+
+	def name_from_vtable(self, parser):
+		parser_addr = parser.address
+		# TODO: do this without passing a string to gdb.parse_and_eval()
+		# perhaps using gdb.Value would be the best
+		vtable = gdb.parse_and_eval("((HParser*) " + parser_addr + ")->env->vtable")
+		try:
+			name = parser_name_defaults[vtable.name()]
+		except KeyError:
+			name = "(Unknown parser type)"
+
+		return name
+
+# TODO: Unit test:
+# make SequenceEnv(parser, top_level_parse)
+# parser_array = [top_level_parse.add_or_get_parser(gdb.parse_and_eval("((HSequence*) parser->env)->p_array[" + str(index) +"]")) for index in range(0, num_parsers)]
+# compare pointers for equality
+
 class SequenceEnv:
 	def __init__(self, parser, top_level_parse):
 		self.parser = parser
@@ -27,6 +48,7 @@ class SequenceEnv:
 		for index in range(0, num_parsers):
 			parser_p = gdb.parse_and_eval("((HSequence*) parser->env)->p_array[" + str(index) + "]")
 			parser_obj = top_level_parse.add_or_get_parser(parser_p)
+			#parser_obj.name_parser( self.name_from_vtable(parser_obj) )
 			self.member_parsers.append(parser_obj)
 
 		# TODO
-- 
GitLab