diff --git a/gdb-port/parser.py b/gdb-port/parser.py index d8d53dc12d268f9365ca0290faf103d37df1c0ce..3af1f561deb5cdd043f519bc060a20ae267439e7 100644 --- a/gdb-port/parser.py +++ b/gdb-port/parser.py @@ -81,7 +81,7 @@ class ParserStack: self.parse_state = parse_state self.parse_state_gdbval = parse_state self.arena = arena - self.arena_int = int(arena) + self.arena_int = 0 # TODO: remove? self.arena_gdbval = arena # self.parse_state and self.arena is expected to be an int by TopLevelParse and is ultimately used to index into the memory usage dict @@ -181,6 +181,13 @@ class ParserStack: retval = None return retval + def set_arena(self, arena): + self.arena = arena + try: + self.arena_int = int(arena) + except TypeError: + self.arena_int = 0 + def set_state(self, state): self.parse_state = state # Shortcut for setting the name property of the parser on the top of stack diff --git a/gdb-port/top-level-parse.py b/gdb-port/top-level-parse.py index ee40a1c887639784f19e745d386b89d0df934a30..ff2af3b12e9674ecaf5ca691a8ca9c6811a2f827 100644 --- a/gdb-port/top-level-parse.py +++ b/gdb-port/top-level-parse.py @@ -68,8 +68,8 @@ class TopLevelParse: parser_stack.push(parser_obj, arena, stopping_at_bp) if stopping_at_bp: profiler.enable() - self.gather_all_allocations_in_parserstacks() - self.commit_pending_allocations(self.pending_allocations) + self.gather_allocations_in_parser_stacks() + self.commit_pending_allocations() profiler.disable() parser_obj.increment_apply_count(int(arena)) if parser_stack.parse_state is None and parser_stack.parse_state != parse_state_int: @@ -89,7 +89,7 @@ class TopLevelParse: def first_h_do_parse_after_packrat_parse(self, parse_state, arena): parser_stack = self.peek_parserstack() if arena and not parser_stack.arena: - parser_stack.arena = arena + parser_stack.set_arena(arena) parser_stack.set_state(parse_state) # Popping the stack of stack of parsers @@ -277,7 +277,7 @@ class TopLevelParse: new_allocs_by_arena = ps.get_pending_allocations() new_allocs = new_allocs_by_arena.get(ps.arena_int, {}) pending_allocs = self.pending_allocs.get(ps.arena_int, {}) - for addr, alloc in new_allocs: + for addr, alloc in new_allocs.items(): pending_allocs[addr] = pending_allocs.get(addr, 0) + alloc self.pending_allocs[ps.arena_int] = pending_allocs @@ -289,7 +289,7 @@ class TopLevelParse: def commit_pending_allocations(self): for arena, allocs in self.pending_allocs.items(): for addr, alloc in allocs.items(): - parser_objs[addr].add_mem_use(arena, alloc) + self.parser_by_address(addr).add_mem_use(arena, alloc) self.pending_allocs = {} top_level_parse = TopLevelParse()