#include "language.h"
#include "valprint.h"
#include "osdata.h"
-#include "common/gdb_splay_tree.h"
+#include "gdbsupport/gdb_splay_tree.h"
#include "tracepoint.h"
#include "ctf.h"
#include "ada-lang.h"
#include "extension.h"
#include "gdbcmd.h"
#include "observable.h"
-#include "common/gdb_optional.h"
-#include "common/byte-vector.h"
+#include "gdbsupport/gdb_optional.h"
+#include "gdbsupport/byte-vector.h"
#include <ctype.h>
-#include "run-time-clock.h"
+#include "gdbsupport/run-time-clock.h"
#include <chrono>
#include "progspace-and-thread.h"
-#include "common/rsp-low.h"
+#include "gdbsupport/rsp-low.h"
#include <algorithm>
#include <set>
#include <map>
output_cores (struct ui_out *uiout, const char *field_name, const char *xcores)
{
ui_out_emit_list list_emitter (uiout, field_name);
- gdb::unique_xmalloc_ptr<char> cores (xstrdup (xcores));
+ auto cores = make_unique_xstrdup (xcores);
char *p = cores.get ();
for (p = strtok (p, ","); p; p = strtok (NULL, ","))
/* Print a gdb exception to the MI output stream. */
static void
-mi_print_exception (const char *token, struct gdb_exception exception)
+mi_print_exception (const char *token, const struct gdb_exception &exception)
{
struct mi_interp *mi = (struct mi_interp *) current_interpreter ();
if (exception.message == NULL)
fputs_unfiltered ("unknown error", mi->raw_stdout);
else
- fputstr_unfiltered (exception.message, '"', mi->raw_stdout);
+ fputstr_unfiltered (exception.what (), '"', mi->raw_stdout);
fputs_unfiltered ("\"", mi->raw_stdout);
switch (exception.error)
target_log_command (cmd);
- TRY
+ try
{
command = mi_parse (cmd, &token);
}
- CATCH (exception, RETURN_MASK_ALL)
+ catch (const gdb_exception &exception)
{
mi_print_exception (token, exception);
xfree (token);
}
- END_CATCH
if (command != NULL)
{
timestamp (command->cmd_start);
}
- TRY
+ try
{
captured_mi_execute_command (current_uiout, command.get ());
}
- CATCH (result, RETURN_MASK_ALL)
+ catch (const gdb_exception &result)
{
/* Like in start_event_loop, enable input and force display
of the prompt. Otherwise, any command that calls
mi_print_exception (command->token, result);
mi_out_rewind (current_uiout);
}
- END_CATCH
bpstat_do_actions ();
which means uiout may not be correct. Fix it for the duration
of this function. */
- std::unique_ptr<ui_out> uiout;
-
- if (current_interp_named_p (INTERP_MI)
- || current_interp_named_p (INTERP_MI2))
- uiout.reset (mi_out_new (2));
- else if (current_interp_named_p (INTERP_MI1))
- uiout.reset (mi_out_new (1));
- else if (current_interp_named_p (INTERP_MI3))
- uiout.reset (mi_out_new (3));
- else
+ std::unique_ptr<ui_out> uiout (mi_out_new (current_interpreter ()->name ()));
+ if (uiout == nullptr)
return;
scoped_restore save_uiout
}
}
+/* See mi/mi-main.h. */
+
+void
+mi_cmd_fix_multi_location_breakpoint_output (const char *command, char **argv,
+ int argc)
+{
+ fix_multi_location_breakpoint_output_globally = true;
+}
+
+/* Implement the "-complete" command. */
+
+void
+mi_cmd_complete (const char *command, char **argv, int argc)
+{
+ if (argc != 1)
+ error (_("Usage: -complete COMMAND"));
+
+ if (max_completions == 0)
+ error (_("max-completions is zero, completion is disabled."));
+
+ int quote_char = '\0';
+ const char *word;
+
+ completion_result result = complete (argv[0], &word, "e_char);
+
+ std::string arg_prefix (argv[0], word - argv[0]);
+
+ struct ui_out *uiout = current_uiout;
+
+ if (result.number_matches > 0)
+ uiout->field_fmt ("completion", "%s%s",
+ arg_prefix.c_str (),result.match_list[0]);
+
+ {
+ ui_out_emit_list completions_emitter (uiout, "matches");
+
+ if (result.number_matches == 1)
+ uiout->field_fmt (NULL, "%s%s",
+ arg_prefix.c_str (), result.match_list[0]);
+ else
+ {
+ result.sort_match_list ();
+ for (size_t i = 0; i < result.number_matches; i++)
+ {
+ uiout->field_fmt (NULL, "%s%s",
+ arg_prefix.c_str (), result.match_list[i + 1]);
+ }
+ }
+ }
+ uiout->field_string ("max_completions_reached",
+ result.number_matches == max_completions ? "1" : "0");
+}
+
+
void
_initialize_mi_main (void)
{