C++-ify parse_format_string
[deliverable/binutils-gdb.git] / gdb / printcmd.c
index 51e3d384798acce8e80d3215223ea725755c6186..7ca86232a10d2a06b816bf589e797f454c5fcfca 100644 (file)
@@ -1214,14 +1214,14 @@ print_command_1 (const char *exp, int voidprint)
 }
 
 static void
-print_command (char *exp, int from_tty)
+print_command (const char *exp, int from_tty)
 {
   print_command_1 (exp, 1);
 }
 
 /* Same as print, except it doesn't print void results.  */
 static void
-call_command (char *exp, int from_tty)
+call_command (const char *exp, int from_tty)
 {
   print_command_1 (exp, 0);
 }
@@ -1229,7 +1229,7 @@ call_command (char *exp, int from_tty)
 /* Implementation of the "output" command.  */
 
 static void
-output_command (char *exp, int from_tty)
+output_command (const char *exp, int from_tty)
 {
   output_command_const (exp, from_tty);
 }
@@ -1295,16 +1295,8 @@ set_command (const char *exp, int from_tty)
   evaluate_expression (expr.get ());
 }
 
-/* Temporary non-const version of set_command.  */
-
 static void
-non_const_set_command (char *exp, int from_tty)
-{
-  set_command (exp, from_tty);
-}
-
-static void
-info_symbol_command (char *arg, int from_tty)
+info_symbol_command (const char *arg, int from_tty)
 {
   struct minimal_symbol *msymbol;
   struct objfile *objfile;
@@ -1395,7 +1387,7 @@ info_symbol_command (char *arg, int from_tty)
 }
 
 static void
-info_address_command (char *exp, int from_tty)
+info_address_command (const char *exp, int from_tty)
 {
   struct gdbarch *gdbarch;
   int regno;
@@ -1619,7 +1611,7 @@ info_address_command (char *exp, int from_tty)
 \f
 
 static void
-x_command (char *exp, int from_tty)
+x_command (const char *exp, int from_tty)
 {
   struct format_data fmt;
   struct value *val;
@@ -1702,7 +1694,7 @@ x_command (char *exp, int from_tty)
    Specify the expression.  */
 
 static void
-display_command (char *arg, int from_tty)
+display_command (const char *arg, int from_tty)
 {
   struct format_data fmt;
   struct display *newobj;
@@ -2061,7 +2053,7 @@ disable_current_display (void)
 }
 
 static void
-info_display_command (char *ignore, int from_tty)
+info_display_command (const char *ignore, int from_tty)
 {
   struct display *d;
 
@@ -2435,14 +2427,8 @@ printf_pointer (struct ui_file *stream, const char *format,
 static void
 ui_printf (const char *arg, struct ui_file *stream)
 {
-  struct format_piece *fpieces;
   const char *s = arg;
-  struct value **val_args;
-  int allocated_args = 20;
-  struct cleanup *old_cleanups;
-
-  val_args = XNEWVEC (struct value *, allocated_args);
-  old_cleanups = make_cleanup (free_current_contents, &val_args);
+  std::vector<struct value *> val_args;
 
   if (s == 0)
     error_no_arg (_("format-control string and values to print"));
@@ -2453,9 +2439,7 @@ ui_printf (const char *arg, struct ui_file *stream)
   if (*s++ != '"')
     error (_("Bad format string, missing '\"'."));
 
-  fpieces = parse_format_string (&s);
-
-  make_cleanup (free_format_pieces_cleanup, &fpieces);
+  format_pieces fpieces (&s);
 
   if (*s++ != '"')
     error (_("Bad format string, non-terminated '\"'."));
@@ -2470,14 +2454,13 @@ ui_printf (const char *arg, struct ui_file *stream)
   s = skip_spaces (s);
 
   {
-    int nargs = 0;
     int nargs_wanted;
-    int i, fr;
-    char *current_substring;
+    int i;
+    const char *current_substring;
 
     nargs_wanted = 0;
-    for (fr = 0; fpieces[fr].string != NULL; fr++)
-      if (fpieces[fr].argclass != literal_piece)
+    for (auto &&piece : fpieces)
+      if (piece.argclass != literal_piece)
        ++nargs_wanted;
 
     /* Now, parse all arguments and evaluate them.
@@ -2487,28 +2470,23 @@ ui_printf (const char *arg, struct ui_file *stream)
       {
        const char *s1;
 
-       if (nargs == allocated_args)
-         val_args = (struct value **) xrealloc ((char *) val_args,
-                                                (allocated_args *= 2)
-                                                * sizeof (struct value *));
        s1 = s;
-       val_args[nargs] = parse_to_comma_and_eval (&s1);
+       val_args.push_back (parse_to_comma_and_eval (&s1));
 
-       nargs++;
        s = s1;
        if (*s == ',')
          s++;
       }
 
-    if (nargs != nargs_wanted)
+    if (val_args.size () != nargs_wanted)
       error (_("Wrong number of arguments for specified format-string"));
 
     /* Now actually print them.  */
     i = 0;
-    for (fr = 0; fpieces[fr].string != NULL; fr++)
+    for (auto &&piece : fpieces)
       {
-       current_substring = fpieces[fr].string;
-       switch (fpieces[fr].argclass)
+       current_substring = piece.string;
+       switch (piece.argclass)
          {
          case string_arg:
            printf_c_string (stream, current_substring, val_args[i]);
@@ -2577,7 +2555,7 @@ ui_printf (const char *arg, struct ui_file *stream)
          case dec64float_arg:
          case dec128float_arg:
            printf_floating (stream, current_substring, val_args[i],
-                            fpieces[fr].argclass);
+                            piece.argclass);
            break;
          case ptr_arg:
            printf_pointer (stream, current_substring, val_args[i]);
@@ -2598,17 +2576,16 @@ ui_printf (const char *arg, struct ui_file *stream)
                            _("failed internal consistency check"));
          }
        /* Maybe advance to the next argument.  */
-       if (fpieces[fr].argclass != literal_piece)
+       if (piece.argclass != literal_piece)
          ++i;
       }
   }
-  do_cleanups (old_cleanups);
 }
 
 /* Implement the "printf" command.  */
 
 static void
-printf_command (char *arg, int from_tty)
+printf_command (const char *arg, int from_tty)
 {
   ui_printf (arg, gdb_stdout);
   gdb_flush (gdb_stdout);
@@ -2617,7 +2594,7 @@ printf_command (char *arg, int from_tty)
 /* Implement the "eval" command.  */
 
 static void
-eval_command (char *arg, int from_tty)
+eval_command (const char *arg, int from_tty)
 {
   string_file stb;
 
@@ -2625,7 +2602,7 @@ eval_command (char *arg, int from_tty)
 
   std::string expanded = insert_user_defined_cmd_args (stb.c_str ());
 
-  execute_command (&expanded[0], from_tty);
+  execute_command (expanded.c_str (), from_tty);
 }
 
 void
@@ -2722,7 +2699,7 @@ With a subcommand, this command modifies parts of the gdb environment.\n\
 You can see these environment settings with the \"show\" command."),
                  &setlist, "set ", 1, &cmdlist);
   if (dbx_commands)
-    add_com ("assign", class_vars, non_const_set_command, _("\
+    add_com ("assign", class_vars, set_command, _("\
 Evaluate expression EXP and assign result to variable VAR, using assignment\n\
 syntax appropriate for the current language (VAR = EXP or VAR := EXP for\n\
 example).  VAR may be a debugger \"convenience\" variable (names starting\n\
This page took 0.027551 seconds and 4 git commands to generate.