This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [RFA] add selected-frame-level-changed events
- From: Keith Seitz <keiths at redhat dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: Wed, 28 Aug 2002 08:39:41 -0700 (PDT)
- Subject: Re: [RFA] add selected-frame-level-changed events
On Tue, 27 Aug 2002, Andrew Cagney wrote:
> Ok. Can you just add comments explaining the above, especially in
> select_frame(), so that people know why the call isn't yet there.
I've appended a revised patch for your review.
> As for the unnecessary select frame calls, I guess ``we'' are working on
> it. I suspect that varobj could do with an audit --- use FRAME_ID() and
> frame parameterized versions of various functions.
Hmmm... Patch coming.
Keith
Revised patch:
Index: stack.c
===================================================================
RCS file: /cvs/src/src/gdb/stack.c,v
retrieving revision 1.40
diff -p -r1.40 stack.c
*** stack.c 11 Jul 2002 19:29:08 -0000 1.40
--- stack.c 28 Aug 2002 15:36:14 -0000
*************** select_frame (struct frame_info *fi)
*** 1516,1521 ****
--- 1516,1527 ----
frame is being invalidated. */
if (selected_frame_level_changed_hook)
selected_frame_level_changed_hook (frame_relative_level (fi));
+ /* NOTE: kseitz/2002-08-28: It would be nice to call
+ selected_frame_level_changed_event right here, but we would end up
+ flooding the UI with events because select_frame is used extensively
+ internally. Instead, event notifications are scattered through
+ the "UI" code, select_frame_command, up_silently_base, and
+ down_silently_base. */
/* Ensure that symbols for this frame are read in. Also, determine the
source language of this frame, and switch to it if desired. */
*************** select_frame_command_wrapper (char *leve
*** 1620,1627 ****
static void
select_frame_command (char *level_exp, int from_tty)
{
! register struct frame_info *frame, *frame1;
! unsigned int level = 0;
if (!target_has_stack)
error ("No stack.");
--- 1626,1633 ----
static void
select_frame_command (char *level_exp, int from_tty)
{
! struct frame_info *frame;
! int level = frame_relative_level (selected_frame);
if (!target_has_stack)
error ("No stack.");
*************** select_frame_command (char *level_exp, i
*** 1629,1634 ****
--- 1635,1642 ----
frame = parse_frame_specification (level_exp);
select_frame (frame);
+ if (level != frame_relative_level (selected_frame))
+ selected_frame_level_changed_event (frame_relative_level (selected_frame));
}
/* The "frame" command. With no arg, print selected frame briefly.
*************** up_silently_base (char *count_exp)
*** 1674,1679 ****
--- 1682,1688 ----
if (count1 != 0 && count_exp == 0)
error ("Initial frame selected; you cannot go up.");
select_frame (fi);
+ selected_frame_level_changed_event (frame_relative_level (selected_frame));
}
static void
*************** down_silently_base (char *count_exp)
*** 1719,1724 ****
--- 1728,1734 ----
}
select_frame (frame);
+ selected_frame_level_changed_event (frame_relative_level (selected_frame));
}
/* ARGSUSED */