| Index: gdb/cli/cli-script.c
|
| diff --git a/gdb/cli/cli-script.c b/gdb/cli/cli-script.c
|
| index c8da8c83e14cb4d5bff571cccf8388d70252b4bf..4b6c416914584c45af803a6b489502029a37f2e7 100644
|
| --- a/gdb/cli/cli-script.c
|
| +++ b/gdb/cli/cli-script.c
|
| @@ -1178,6 +1178,12 @@ recurse_read_control_structure (char * (*read_next_line_func) (void),
|
| return ret;
|
| }
|
|
|
| +static void
|
| +restore_interp (void *arg)
|
| +{
|
| + interp_set_temp (interp_name ((struct interp *)arg));
|
| +}
|
| +
|
| /* Read lines from the input stream and accumulate them in a chain of
|
| struct command_line's, which is then returned. For input from a
|
| terminal, the special command "end" is used to mark the end of the
|
| @@ -1210,8 +1216,21 @@ read_command_lines (char *prompt_arg, int from_tty, int parse_commands,
|
| }
|
| }
|
|
|
| - head = read_command_lines_1 (read_next_line, parse_commands,
|
| - validator, closure);
|
| +
|
| + /* Reading commands assumes the CLI behavior, so temporarily
|
| + override the current interpreter with CLI. */
|
| + if (current_interp_named_p (INTERP_CONSOLE))
|
| + head = read_command_lines_1 (read_next_line, parse_commands,
|
| + validator, closure);
|
| + else
|
| + {
|
| + struct interp *old_interp = interp_set_temp (INTERP_CONSOLE);
|
| + struct cleanup *old_chain = make_cleanup (restore_interp, old_interp);
|
| +
|
| + head = read_command_lines_1 (read_next_line, parse_commands,
|
| + validator, closure);
|
| + do_cleanups (old_chain);
|
| + }
|
|
|
| if (deprecated_readline_end_hook && from_tty && input_from_terminal_p ())
|
| {
|
| @@ -1614,11 +1633,9 @@ script_from_file (FILE *stream, const char *file)
|
| if (stream == NULL)
|
| internal_error (__FILE__, __LINE__, _("called with NULL file pointer!"));
|
|
|
| - old_cleanups = make_cleanup_fclose (stream);
|
| -
|
| old_lines.old_line = source_line_number;
|
| old_lines.old_file = source_file_name;
|
| - make_cleanup (source_cleanup_lines, &old_lines);
|
| + old_cleanups = make_cleanup (source_cleanup_lines, &old_lines);
|
| source_line_number = 0;
|
| source_file_name = file;
|
| /* This will get set every time we read a line. So it won't stay ""
|
|
|