From 6268758374064edcae96ceffd70c2afe0408f938 Mon Sep 17 00:00:00 2001 From: pompolic <pompolic@special-circumstanc.es> Date: Mon, 27 Mar 2023 15:50:28 +0200 Subject: [PATCH] (WIP commit) Error messages seemingly fixed TODO: document the TopLevelParse api (GDBValue vs. int) TODO: remove redundant variables TODO: integration tests for TopLevelParse --- gdb-port/hammer-breakpoints.py | 2 +- gdb-port/parser.py | 1 + gdb-port/top-level-parse.py | 7 +++++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/gdb-port/hammer-breakpoints.py b/gdb-port/hammer-breakpoints.py index 95035d5..410c847 100644 --- a/gdb-port/hammer-breakpoints.py +++ b/gdb-port/hammer-breakpoints.py @@ -27,7 +27,7 @@ class HDoParseBreakpoint(gdb.Breakpoint): token_start = index #top_level_parse.enter_h_do_parse(parse_state, None, parser) # Note for the future: passing it as int is intended here, memory stats' keys turn into gdb values too - top_level_parse.enter_h_do_parse(state, arena, parser) + top_level_parse.enter_h_do_parse(parse_state, arena, parser) input_chunk = input_ptr + index #print(input_chunk.string('ascii','backslashreplace',10)) diff --git a/gdb-port/parser.py b/gdb-port/parser.py index 636cb59..a1ce40b 100644 --- a/gdb-port/parser.py +++ b/gdb-port/parser.py @@ -114,6 +114,7 @@ class ParserStack: def pop(self): self.partial_alloc_counts.pop() + parser_obj = self.peek() if self.top_level_parse.memory_stat_method == HammerMemoryStatisticsMethod.DETAILED_ARENA_STATS: #if self.extended_arena_stats_available(): # DEBUG diff --git a/gdb-port/top-level-parse.py b/gdb-port/top-level-parse.py index 1d22941..53fdae6 100644 --- a/gdb-port/top-level-parse.py +++ b/gdb-port/top-level-parse.py @@ -59,7 +59,10 @@ class TopLevelParse: return 0 def enter_h_do_parse(self, parse_state, arena, parser): + #TODO: consistency in expecting GDBValues or ints parser_stack = self.peek_parserstack() + arena_int = int(arena) + parse_state_int = int(parse_state) if parser_stack.arena is None: parser_stack.arena_gdbval = arena if parser_stack.parse_state is None: @@ -74,8 +77,8 @@ class TopLevelParse: parser_stack = self.peek_parserstack() parser_stack.push(parser_obj) parser_obj.increment_apply_count(int(arena)) - if parser_stack.parse_state is None and parser_stack.parse_state != parse_state: - self.first_h_do_parse_after_packrat_parse(parse_state, arena) + if parser_stack.parse_state is None and parser_stack.parse_state != parse_state_int: + self.first_h_do_parse_after_packrat_parse(parse_state_int, arena_int) def return_from_h_do_parse(self, parse_state, parser, ret_val): parser_stack = self.peek_parserstack() -- GitLab