[6/9] gdb: Avoid unneeded calls to parse_frame_specification.

Message ID d31811bc92659ab4253cecf1fa7e6d5e4e44d7e4.1441996064.git.andrew.burgess@embecosm.com
State New, archived
Headers

Commit Message

Andrew Burgess Sept. 11, 2015, 6:49 p.m. UTC
  Within the stack command there are a couple of places where fixed
strings are passed into functions that are really intended for
processing user input.  These fixed strings are then processed and the
result returned.

Given that the input strings in these cases are fixed, and are always
"0", then the result will always be the same, the current frame.  By
switching to using get_current_frame instead the code can be simplified,
and the intention of the code is clearer.

gdb/ChangeLog:

	* stack.c (parse_frame_specification): Delete.
	(parse_frame_specification_1): Rename to
	parse_frame_specification.
	(frame_info): Use parse_frame_specification.
	(select_frame_command): Likewise.
	(return_command): Use select_frame and print_stack_frame rather
	than frame_command and select_frame_command.
	(func_command): Use get_current_frame rather than
	parse_frame_specification.
---
 gdb/ChangeLog | 12 ++++++++++++
 gdb/stack.c   | 21 +++++++--------------
 2 files changed, 19 insertions(+), 14 deletions(-)
  

Comments

Pedro Alves Sept. 30, 2015, 1:48 p.m. UTC | #1
On 09/11/2015 07:49 PM, Andrew Burgess wrote:
> Within the stack command there are a couple of places where fixed
> strings are passed into functions that are really intended for
> processing user input.  These fixed strings are then processed and the
> result returned.
> 
> Given that the input strings in these cases are fixed, and are always
> "0", then the result will always be the same, the current frame.  By
> switching to using get_current_frame instead the code can be simplified,
> and the intention of the code is clearer.
> 
> gdb/ChangeLog:
> 
> 	* stack.c (parse_frame_specification): Delete.
> 	(parse_frame_specification_1): Rename to
> 	parse_frame_specification.
> 	(frame_info): Use parse_frame_specification.
> 	(select_frame_command): Likewise.
> 	(return_command): Use select_frame and print_stack_frame rather
> 	than frame_command and select_frame_command.
> 	(func_command): Use get_current_frame rather than
> 	parse_frame_specification.

OK.  Nice clean up.

Thanks,
Pedro Alves
  

Patch

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 7c4b567..dccac52 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,17 @@ 
 2015-09-11  Andrew Burgess  <andrew.burgess@embecosm.com>
 
+	* stack.c (parse_frame_specification): Delete.
+	(parse_frame_specification_1): Rename to
+	parse_frame_specification.
+	(frame_info): Use parse_frame_specification.
+	(select_frame_command): Likewise.
+	(return_command): Use select_frame and print_stack_frame rather
+	than frame_command and select_frame_command.
+	(func_command): Use get_current_frame rather than
+	parse_frame_specification.
+
+2015-09-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
 	* stack.c (func_command): Return early when there is no ARG
 	string.
 
diff --git a/gdb/stack.c b/gdb/stack.c
index 1049995..1bc1fe6 100644
--- a/gdb/stack.c
+++ b/gdb/stack.c
@@ -1280,8 +1280,8 @@  print_frame (struct frame_info *frame, int print_level,
    the default selected frame was used.  */
 
 static struct frame_info *
-parse_frame_specification_1 (const char *frame_exp, const char *message,
-			     int *selected_frame_p)
+parse_frame_specification (const char *frame_exp, const char *message,
+			   int *selected_frame_p)
 {
   int numargs;
   struct value *args[4];
@@ -1401,12 +1401,6 @@  parse_frame_specification_1 (const char *frame_exp, const char *message,
     error (_("Too many args in frame specification"));
 }
 
-static struct frame_info *
-parse_frame_specification (char *frame_exp)
-{
-  return parse_frame_specification_1 (frame_exp, NULL, NULL);
-}
-
 /* Print verbosely the selected frame or the frame at address
    ADDR_EXP.  Absolutely all information in the frame is printed.  */
 
@@ -1431,7 +1425,7 @@  frame_info (char *addr_exp, int from_tty)
   CORE_ADDR caller_pc = 0;
   int caller_pc_p = 0;
 
-  fi = parse_frame_specification_1 (addr_exp, "No stack.", &selected_frame_p);
+  fi = parse_frame_specification (addr_exp, "No stack.", &selected_frame_p);
   gdbarch = get_frame_arch (fi);
 
   /* During the following value will be created and then displayed.
@@ -2293,7 +2287,7 @@  find_relative_frame (struct frame_info *frame, int *level_offset_ptr)
 void
 select_frame_command (char *level_exp, int from_tty)
 {
-  select_frame (parse_frame_specification_1 (level_exp, "No stack.", NULL));
+  select_frame (parse_frame_specification (level_exp, "No stack.", NULL));
 }
 
 /* The "frame" command.  With no argument, print the selected frame
@@ -2501,11 +2495,10 @@  return_command (char *retval_exp, int from_tty)
   if (get_frame_type (get_current_frame ()) == DUMMY_FRAME)
     frame_pop (get_current_frame ());
 
+  select_frame (get_current_frame ());
   /* If interactive, print the frame that is now current.  */
   if (from_tty)
-    frame_command ("0", 1);
-  else
-    select_frame_command ("0", 0);
+    print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
 }
 
 /* Sets the scope to input function name, provided that the function
@@ -2530,7 +2523,7 @@  func_command (char *arg, int from_tty)
   if (arg == NULL)
     return;
 
-  frame = parse_frame_specification ("0");
+  frame = get_current_frame ();
   sals = decode_line_with_current_source (arg, DECODE_LINE_FUNFIRSTLINE);
   cleanups = make_cleanup (xfree, sals.sals);
   func_bounds = XNEWVEC (struct function_bounds, sals.nelts);