diff --git a/gdb-port/gui.py b/gdb-port/gui.py index e680e9c3b436b6434b0a8552d61545140750ad46..5130ca8041fcb0e5d224db60431490e1902ee555 100644 --- a/gdb-port/gui.py +++ b/gdb-port/gui.py @@ -32,7 +32,7 @@ else: root.columnconfigure(0, weight=1) root.rowconfigure(0, weight=1) - parser = StringVar() + parser = StringVar() # TODO: encapsulate variables to avoid namespace pollution parser_addr = StringVar() input_chunk = StringVar() presentation_layer = PresentationLayer(top_level_parse.peek_parser(), parser, parser_addr, input_chunk) diff --git a/gdb-port/parser-name-instrumentation-gdb.py b/gdb-port/parser-name-instrumentation-gdb.py index 999a6da6a96366b90cbf785f29eb163572245349..2b6c04757494c66d692fae35781ab311f5f20786 100644 --- a/gdb-port/parser-name-instrumentation-gdb.py +++ b/gdb-port/parser-name-instrumentation-gdb.py @@ -1,6 +1,9 @@ # TODO: handlers for filters # TODO: postordinate parser fails to get named +# quick way to get locals from frame.block() +# {local.name : local for local in block} + class Parser: #TODO: remove _parser_names = {} @@ -141,6 +144,7 @@ class TopLevelParse: # Memoize the parser object for this particular address, then push it on the stack # Returns the parser object we just initalized (or the one already existing) + #TODO: memoize_parser method def enter_perform_lowlevel_parse(self, parser_addr): try: parser_obj = self.parser_objs[parser_addr] diff --git a/gdb-port/parser-type-instrumentation-gdb.py b/gdb-port/parser-type-instrumentation-gdb.py new file mode 100644 index 0000000000000000000000000000000000000000..3a46a3c5dc495342196c9e3d96406321cc6d8dcb --- /dev/null +++ b/gdb-port/parser-type-instrumentation-gdb.py @@ -0,0 +1,37 @@ +# These need to be constructed in HDoParseBreakpoint (or at least in a scope where 'parser' is visible) +# TODO: these can learn of parsers before the parser name instrumentation does +# TopLevelParse should be amenable to adding parsers to the dict through here + + +class SequenceEnv: + def __init__(self, parser, top_level_parse) + self.parser = parser + self.member_parsers = [] + + frame = gdb.selected_frame() + h_sequence_p = gdb.parse_and_eval("(HSequence*) parser->env") + # TODO + + +class IgnoreEnv: + def __init__(self, parser, top_level_parse): + self.parser = parser + self.member_parser_pointers = [] + + ignored_p = gdb.parse_and_eval("(HParser*) parser->env") + + # Ideally we could look up ignored_p using top_level_parse, but it will not find a result if perform_lowlevel_parse(ignored_p) wasn't called yet + #TODO: method to add parser in TopLevelParse + + ''' + try: + parser_obj = top_level_parse.parser_objs[ignored_p] + except KeyError: + # Create a parser object with no name and the address of the parser + parser_obj = Parser(None, int(ignored_p)) + top_level_parse.parser_objs[int(ignored_p)] = parser_obj + + self.member_parsers.append(parser_obj) + ''' + self.member_parsers.append(ignored_p) +