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