From 6b959cf8b865381cafb6a6988905ee3f1c23eea2 Mon Sep 17 00:00:00 2001 From: pompolic <pompolic@special-circumstanc.es> Date: Fri, 11 Nov 2022 19:55:26 +0100 Subject: [PATCH] Replace iteration over locals in block with subscript notation Now the rest of them. Also fixes trying to access nonexistent parameter to h_do_parse() --- gdb-port/hammer-breakpoints.py | 28 ++++++---------------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/gdb-port/hammer-breakpoints.py b/gdb-port/hammer-breakpoints.py index 3919e67..d2ea306 100644 --- a/gdb-port/hammer-breakpoints.py +++ b/gdb-port/hammer-breakpoints.py @@ -2,9 +2,7 @@ class HPackratParseBreakpoint(gdb.Breakpoint): def stop(self): frame = gdb.selected_frame() block = frame.block() - for val in block: # GDB, why did you take away [] for gdb.Block? - if val.name == 'parser': - parser = int(val.value(frame)) + parser = int(block['parser'].value(frame)) top_level_parse.enter_h_packrat_parse(parser) return False @@ -20,22 +18,11 @@ class HDoParseBreakpoint(gdb.Breakpoint): frame = gdb.selected_frame() block = frame.block() retval = False - for val in block: - if val.name == 'parser': - parser = int(val.value(frame)) - if val.name == 'state': - #TODO: rename these variables to make it clear they're pointers - # TODO: top level parse should get state as gdb.Value, or int, but not both - # TODO: rewrite this with subscript syntax, as below - state = int(val.value(frame)) - state_obj = val.value(frame) - index = val.value(frame).dereference()['input_stream']['index'] - input_ptr = val.value(frame).dereference()['input_stream']['input'] - # If you want to printf debug the parse state - #print(val.value(frame).dereference()) - if val.name == 'arena': - arena = int(val.value(frame)) + parser = int(block['parser'].value(frame)) + state = int(block['state'].value(frame)) parse_state = block['state'].value(frame) + index = parse_state.dereference()['input_stream']['index'] + input_ptr = parse_state.dereference()['input_stream']['input'] token_start = index top_level_parse.enter_h_do_parse(parse_state, None, parser) @@ -164,10 +151,7 @@ class HArenaMallocRawBreakpoint(gdb.Breakpoint): frame = gdb.selected_frame() block = frame.block() - for val in block: - if val.name == 'size': - alloc_size = int(val.value(frame)) - + alloc_size = int(block['size'].value(frame)) top_level_parse.enter_h_arena_malloc_raw(alloc_size) return False -- GitLab