diff options
| author | Po Lu | 2022-07-27 17:39:14 +0800 |
|---|---|---|
| committer | Po Lu | 2022-07-27 17:42:30 +0800 |
| commit | bfa951cdfad482a106bed11e4f11cedfad58570a (patch) | |
| tree | 97cbf7e4921baebf4cfd9932823a9f04c8238fae /src/print.c | |
| parent | 8be5481b8ed869e1ac04c07c3919a9a49afd8667 (diff) | |
| download | emacs-bfa951cdfad482a106bed11e4f11cedfad58570a.tar.gz emacs-bfa951cdfad482a106bed11e4f11cedfad58570a.zip | |
Fix invalid current buffer after print-unreadable-function signals
* src/print.c (PRINTPREPARE): Remove `old' and
record_unwind_current_buffer instead.
(PRINTFINISH): Stop restoring `old'. (bug#56773)
Diffstat (limited to 'src/print.c')
| -rw-r--r-- | src/print.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/src/print.c b/src/print.c index b5a621f80aa..6218c76224c 100644 --- a/src/print.c +++ b/src/print.c | |||
| @@ -98,7 +98,6 @@ bool print_output_debug_flag EXTERNALLY_VISIBLE = 1; | |||
| 98 | or call strout to output a block of characters. */ | 98 | or call strout to output a block of characters. */ |
| 99 | 99 | ||
| 100 | #define PRINTPREPARE \ | 100 | #define PRINTPREPARE \ |
| 101 | struct buffer *old = current_buffer; \ | ||
| 102 | ptrdiff_t old_point = -1, start_point = -1; \ | 101 | ptrdiff_t old_point = -1, start_point = -1; \ |
| 103 | ptrdiff_t old_point_byte = -1, start_point_byte = -1; \ | 102 | ptrdiff_t old_point_byte = -1, start_point_byte = -1; \ |
| 104 | specpdl_ref specpdl_count = SPECPDL_INDEX (); \ | 103 | specpdl_ref specpdl_count = SPECPDL_INDEX (); \ |
| @@ -106,6 +105,7 @@ bool print_output_debug_flag EXTERNALLY_VISIBLE = 1; | |||
| 106 | bool multibyte \ | 105 | bool multibyte \ |
| 107 | = !NILP (BVAR (current_buffer, enable_multibyte_characters)); \ | 106 | = !NILP (BVAR (current_buffer, enable_multibyte_characters)); \ |
| 108 | Lisp_Object original = printcharfun; \ | 107 | Lisp_Object original = printcharfun; \ |
| 108 | record_unwind_current_buffer (); \ | ||
| 109 | if (NILP (printcharfun)) printcharfun = Qt; \ | 109 | if (NILP (printcharfun)) printcharfun = Qt; \ |
| 110 | if (BUFFERP (printcharfun)) \ | 110 | if (BUFFERP (printcharfun)) \ |
| 111 | { \ | 111 | { \ |
| @@ -192,8 +192,7 @@ bool print_output_debug_flag EXTERNALLY_VISIBLE = 1; | |||
| 192 | SET_PT_BOTH (old_point + (old_point >= start_point \ | 192 | SET_PT_BOTH (old_point + (old_point >= start_point \ |
| 193 | ? PT - start_point : 0), \ | 193 | ? PT - start_point : 0), \ |
| 194 | old_point_byte + (old_point_byte >= start_point_byte \ | 194 | old_point_byte + (old_point_byte >= start_point_byte \ |
| 195 | ? PT_BYTE - start_point_byte : 0)); \ | 195 | ? PT_BYTE - start_point_byte : 0)); |
| 196 | set_buffer_internal (old); | ||
| 197 | 196 | ||
| 198 | /* This is used to restore the saved contents of print_buffer | 197 | /* This is used to restore the saved contents of print_buffer |
| 199 | when there is a recursive call to print. */ | 198 | when there is a recursive call to print. */ |