diff --git a/gdb/python/lib/gdb/dap/frames.py b/gdb/python/lib/gdb/dap/frames.py index 337bbedae0fe249289003c23eb29b1ba0e9be91f..08209d0b361e75de6f79e39ee175df08c523c268 100644 --- a/gdb/python/lib/gdb/dap/frames.py +++ b/gdb/python/lib/gdb/dap/frames.py @@ -18,20 +18,17 @@ import gdb from .startup import in_gdb_thread -# Map from frame (thread,level) pair to frame ID numbers. Note we -# can't use the frame itself here as it is not hashable. -_frame_ids = {} - -# Map from frame ID number back to frames. -_id_to_frame = {} +# A list of all the frames we've reported. A frame's index in the +# list is its ID. We don't use a hash here because frames are not +# hashable. +_all_frames = [] # Clear all the frame IDs. @in_gdb_thread def _clear_frame_ids(evt): - global _frame_ids, _id_to_frame - _frame_ids = {} - _id_to_frame = {} + global _all_frames + _all_frames = [] # Clear the frame ID map whenever the inferior runs. @@ -41,17 +38,17 @@ gdb.events.cont.connect(_clear_frame_ids) @in_gdb_thread def frame_id(frame): """Return the frame identifier for FRAME.""" - global _frame_ids, _id_to_frame - pair = (gdb.selected_thread().global_num, frame.level) - if pair not in _frame_ids: - id = len(_frame_ids) - _frame_ids[pair] = id - _id_to_frame[id] = frame - return _frame_ids[pair] + global _all_frames + for i in range(0, len(_all_frames)): + if _all_frames[i] == frame: + return i + result = len(_all_frames) + _all_frames.append(frame) + return result @in_gdb_thread def frame_for_id(id): """Given a frame identifier ID, return the corresponding frame.""" - global _id_to_frame - return _id_to_frame[id] + global _all_frames + return _all_frames[id]