gdb/rust: Handle printing structures containing strings
[deliverable/binutils-gdb.git] / gdb / linespec.c
index 71346078d748a7cb7c7e6c7ee6ecd9dce8a5833b..f418e03b774531a8af0b0c16090f378b4fad3e81 100644 (file)
@@ -1141,7 +1141,7 @@ iterate_over_all_matching_symtabs
 
     set_current_program_space (pspace);
 
-    for (objfile *objfile : all_objfiles (current_program_space))
+    for (objfile *objfile : current_program_space->objfiles ())
       {
        if (objfile->sf)
          objfile->sf->qf->expand_symtabs_matching (objfile,
@@ -1150,7 +1150,7 @@ iterate_over_all_matching_symtabs
                                                    NULL, NULL,
                                                    search_domain);
 
-       for (compunit_symtab *cu : objfile_compunits (objfile))
+       for (compunit_symtab *cu : objfile->compunits ())
          {
            struct symtab *symtab = COMPUNIT_FILETABS (cu);
 
@@ -1159,7 +1159,7 @@ iterate_over_all_matching_symtabs
 
            if (include_inline)
              {
-               struct block *block;
+               const struct block *block;
                int i;
 
                for (i = FIRST_LOCAL_BLOCK;
@@ -1190,16 +1190,10 @@ iterate_over_all_matching_symtabs
 static const struct block *
 get_current_search_block (void)
 {
-  const struct block *block;
-  enum language save_language;
-
   /* get_selected_block can change the current language when there is
      no selected frame yet.  */
-  save_language = current_language->la_language;
-  block = get_selected_block (0);
-  set_language (save_language);
-
-  return block;
+  scoped_restore_current_language save_language;
+  return get_selected_block (0);
 }
 
 /* Iterate over static and global blocks.  */
@@ -1209,7 +1203,7 @@ iterate_over_file_blocks
   (struct symtab *symtab, const lookup_name_info &name,
    domain_enum domain, gdb::function_view<symbol_found_callback_ftype> callback)
 {
-  struct block *block;
+  const struct block *block;
 
   for (block = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab), STATIC_BLOCK);
        block != NULL;
@@ -2102,16 +2096,14 @@ create_sals_line_offset (struct linespec_state *self,
   if (ls->file_symtabs->size () == 1
       && ls->file_symtabs->front () == nullptr)
     {
-      const char *fullname;
-
       set_current_program_space (self->program_space);
 
       /* Make sure we have at least a default source line.  */
       set_default_source_symtab_and_line ();
       initialize_defaults (&self->default_symtab, &self->default_line);
-      fullname = symtab_to_fullname (self->default_symtab);
       *ls->file_symtabs
-       = collect_symtabs_from_filename (fullname, self->search_pspace);
+       = collect_symtabs_from_filename (self->default_symtab->filename,
+                                        self->search_pspace);
       use_default = 1;
     }
 
@@ -2391,16 +2383,15 @@ convert_explicit_location_to_linespec (struct linespec_state *self,
 
   if (source_filename != NULL)
     {
-      TRY
+      try
        {
          *result->file_symtabs
            = symtabs_from_filename (source_filename, self->search_pspace);
        }
-      CATCH (except, RETURN_MASK_ERROR)
+      catch (const gdb_exception_error &except)
        {
          source_file_not_found_error (source_filename);
        }
-      END_CATCH
       result->explicit_loc.source_filename = xstrdup (source_filename);
     }
   else
@@ -2517,7 +2508,7 @@ parse_linespec (linespec_parser *parser, const char *arg,
                symbol_name_match_type match_type)
 {
   linespec_token token;
-  struct gdb_exception file_exception = exception_none;
+  struct gdb_exception file_exception;
 
   /* A special case to start.  It has become quite popular for
      IDEs to work around bugs in the previous parser by quoting
@@ -2616,17 +2607,16 @@ parse_linespec (linespec_parser *parser, const char *arg,
       gdb::unique_xmalloc_ptr<char> user_filename = copy_token_string (token);
 
       /* Check if the input is a filename.  */
-      TRY
+      try
        {
          *PARSER_RESULT (parser)->file_symtabs
            = symtabs_from_filename (user_filename.get (),
                                     PARSER_STATE (parser)->search_pspace);
        }
-      CATCH (ex, RETURN_MASK_ERROR)
+      catch (gdb_exception_error &ex)
        {
-         file_exception = ex;
+         file_exception = std::move (ex);
        }
-      END_CATCH
 
       if (file_exception.reason >= 0)
        {
@@ -2673,7 +2663,7 @@ parse_linespec (linespec_parser *parser, const char *arg,
       /* The linespec didn't parse.  Re-throw the file exception if
         there was one.  */
       if (file_exception.reason < 0)
-       throw_exception (file_exception);
+       throw_exception (std::move (file_exception));
 
       /* Otherwise, the symbol is not found.  */
       symbol_not_found_error (PARSER_EXPLICIT (parser)->function_name,
@@ -2931,7 +2921,7 @@ linespec_complete_label (completion_tracker &tracker,
 
   line_offset unknown_offset = { 0, LINE_OFFSET_UNKNOWN };
 
-  TRY
+  try
     {
       convert_explicit_location_to_linespec (PARSER_STATE (&parser),
                                             PARSER_RESULT (&parser),
@@ -2940,11 +2930,10 @@ linespec_complete_label (completion_tracker &tracker,
                                             func_name_match_type,
                                             NULL, unknown_offset);
     }
-  CATCH (ex, RETURN_MASK_ERROR)
+  catch (const gdb_exception_error &ex)
     {
       return;
     }
-  END_CATCH
 
   complete_label (tracker, &parser, label_name);
 }
@@ -2967,14 +2956,13 @@ linespec_complete (completion_tracker &tracker, const char *text,
 
   /* Parse as much as possible.  parser.completion_word will hold
      furthest completion point we managed to parse to.  */
-  TRY
+  try
     {
       parse_linespec (&parser, text, match_type);
     }
-  CATCH (except, RETURN_MASK_ERROR)
+  catch (const gdb_exception_error &except)
     {
     }
-  END_CATCH
 
   if (parser.completion_quote_char != '\0'
       && parser.completion_quote_end != NULL
@@ -3156,17 +3144,16 @@ event_location_to_sals (linespec_parser *parser,
     case LINESPEC_LOCATION:
       {
        PARSER_STATE (parser)->is_linespec = 1;
-       TRY
+       try
          {
            const linespec_location *ls = get_linespec_location (location);
            result = parse_linespec (parser,
                                     ls->spec_string, ls->match_type);
          }
-       CATCH (except, RETURN_MASK_ERROR)
+       catch (const gdb_exception_error &except)
          {
-           throw_exception (except);
+           throw;
          }
-       END_CATCH
       }
       break;
 
@@ -3967,7 +3954,7 @@ find_linespec_symbols (struct linespec_state *state,
       if (!classes.empty ())
        {
          /* Now locate a list of suitable methods named METHOD.  */
-         TRY
+         try
            {
              find_method (state, file_symtabs,
                           klass.c_str (), method.c_str (),
@@ -3976,12 +3963,11 @@ find_linespec_symbols (struct linespec_state *state,
 
          /* If successful, we're done.  If NOT_FOUND_ERROR
             was not thrown, rethrow the exception that we did get.  */
-         CATCH (except, RETURN_MASK_ERROR)
+         catch (const gdb_exception_error &except)
            {
              if (except.error != NOT_FOUND_ERROR)
-               throw_exception (except);
+               throw;
            }
-         END_CATCH
        }
     }
 }
@@ -4357,7 +4343,7 @@ search_minsyms_for_name (struct collect_info *info,
 
        set_current_program_space (pspace);
 
-       for (objfile *objfile : all_objfiles (current_program_space))
+       for (objfile *objfile : current_program_space->objfiles ())
          {
            iterate_over_minimal_symbols (objfile, name,
                                          [&] (struct minimal_symbol *msym)
This page took 0.02689 seconds and 4 git commands to generate.