Same as previous patches, but for no_history.
Change-Id: I06930fe7cb4082138c6c5496c5118fe4951c10da
print_exited_reason (this->interp_ui_out (), status);
}
-/* Observer for the no_history notification. */
-
-static void
-cli_base_on_no_history ()
+void
+cli_interp_base::on_no_history ()
{
- SWITCH_THRU_ALL_UIS ()
- {
- cli_interp_base *cli = as_cli_interp_base (top_level_interpreter ());
- if (cli == nullptr)
- continue;
-
- print_no_history_reason (cli->interp_ui_out ());
- }
+ print_no_history_reason (this->interp_ui_out ());
}
/* Observer for the sync_execution_done notification. */
interp_factory_register (INTERP_CONSOLE, cli_interp_factory);
/* Note these all work for both the CLI and TUI interpreters. */
- gdb::observers::no_history.attach (cli_base_on_no_history, "cli-interp-base");
gdb::observers::sync_execution_done.attach (cli_base_on_sync_execution_done,
"cli-interp-base");
gdb::observers::command_error.attach (cli_base_on_command_error,
void on_signal_exited (gdb_signal sig) override;
void on_normal_stop (bpstat *bs, int print_frame) override;
void on_exited (int status) override;
+ void on_no_history () override;
private:
struct saved_output_files
if (handle_stop_requested (ecs))
return;
- gdb::observers::no_history.notify ();
+ interps_notify_no_history ();
stop_waiting (ecs);
return;
}
/* See interps.h. */
+void
+interps_notify_no_history ()
+{
+ interps_notify (&interp::on_no_history);
+}
+
+/* See interps.h. */
+
void
interps_notify_normal_stop (bpstat *bs, int print_frame)
{
status STATUS. */
virtual void on_exited (int status) {}
+ /* Notify the interpreter that the current inferior has stopped reverse
+ execution because there is no more history. */
+ virtual void on_no_history () {}
+
private:
/* The memory for this is static, it comes from literal strings (e.g. "cli"). */
const char *m_name;
/* Notify all interpreters that the current inferior has stopped normally. */
extern void interps_notify_normal_stop (bpstat *bs, int print_frame);
+/* Notify all interpreters that the current inferior has stopped reverse
+ execution because there is no more history. */
+extern void interps_notify_no_history ();
+
/* Notify all interpreters that the current inferior has exited normally with
status STATUS. */
extern void interps_notify_exited (int status);
static void mi_insert_notify_hooks (void);
static void mi_remove_notify_hooks (void);
-static void mi_on_no_history (void);
-
static void mi_new_thread (struct thread_info *t);
static void mi_thread_exit (struct thread_info *t, int silent);
static void mi_record_changed (struct inferior*, int, const char *,
}
}
-/* Return the MI interpreter, if it is active -- either because it's
- the top-level interpreter or the interpreter executing the current
- command. Returns NULL if the MI interpreter is not being used. */
-
-static struct mi_interp *
-find_mi_interp (void)
-{
- struct mi_interp *mi;
-
- mi = as_mi_interp (top_level_interpreter ());
- if (mi != NULL)
- return mi;
-
- mi = as_mi_interp (command_interp ());
- if (mi != NULL)
- return mi;
-
- return NULL;
-}
-
/* Observers for several run control events that print why the
inferior has stopped to both the MI event channel and to the MI
console. If the MI interpreter is not active, print nothing. */
print_exited_reason (this->cli_uiout, status);
}
-/* Observer for the no_history notification. */
-
-static void
-mi_on_no_history (void)
+void
+mi_interp::on_no_history ()
{
- SWITCH_THRU_ALL_UIS ()
- {
- struct mi_interp *mi = find_mi_interp ();
-
- if (mi == NULL)
- continue;
-
- print_no_history_reason (mi->mi_uiout);
- print_no_history_reason (mi->cli_uiout);
- }
+ print_no_history_reason (this->mi_uiout);
+ print_no_history_reason (this->cli_uiout);
}
void
interp_factory_register (INTERP_MI4, mi_interp_factory);
interp_factory_register (INTERP_MI, mi_interp_factory);
- gdb::observers::no_history.attach (mi_on_no_history, "mi-interp");
gdb::observers::new_thread.attach (mi_new_thread, "mi-interp");
gdb::observers::thread_exit.attach (mi_thread_exit, "mi-interp");
gdb::observers::inferior_added.attach (mi_inferior_added, "mi-interp");
void on_signal_exited (gdb_signal sig) override;
void on_normal_stop (struct bpstat *bs, int print_frame) override;
void on_exited (int status) override;
+ void on_no_history () override;
/* MI's output channels */
mi_console_file *out;
DEFINE_OBSERVABLE (normal_stop);
DEFINE_OBSERVABLE (signal_received);
-DEFINE_OBSERVABLE (no_history);
DEFINE_OBSERVABLE (sync_execution_done);
DEFINE_OBSERVABLE (command_error);
DEFINE_OBSERVABLE (target_changed);
/* The inferior was stopped by a signal. */
extern observable<enum gdb_signal /* siggnal */> signal_received;
-/* Reverse execution: target ran out of history info. */
-extern observable<> no_history;
-
/* A synchronous command finished. */
extern observable<> sync_execution_done;