diff options
| author | Paul Eggert | 2015-12-26 09:30:22 -0800 |
|---|---|---|
| committer | Paul Eggert | 2015-12-26 09:32:03 -0800 |
| commit | b45828ee139dae3b9570883816453f5a451d35d3 (patch) | |
| tree | 6fd22db6bb15ba6f3a680bbecde8d769a5b3c55d /src/eval.c | |
| parent | 9e9f6fb2a2222c1348da25be7cabc6c9e021eeb4 (diff) | |
| download | emacs-b45828ee139dae3b9570883816453f5a451d35d3.tar.gz emacs-b45828ee139dae3b9570883816453f5a451d35d3.zip | |
Propagate Bug#14412 fix to backtrace_eval_unrewind
* src/eval.c (unbind_to): Redo so that the FALLTHROUGH!! comment
becomes accurate again. This shouldn’t affect behavior.
(backtrace_eval_unrewind): Apply the recent unbind_to fix here, too.
Diffstat (limited to 'src/eval.c')
| -rw-r--r-- | src/eval.c | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/src/eval.c b/src/eval.c index 571681c318f..bd0cf68369c 100644 --- a/src/eval.c +++ b/src/eval.c | |||
| @@ -3196,15 +3196,12 @@ unbind_to (ptrdiff_t count, Lisp_Object value) | |||
| 3196 | { /* If variable has a trivial value (no forwarding), we can | 3196 | { /* If variable has a trivial value (no forwarding), we can |
| 3197 | just set it. No need to check for constant symbols here, | 3197 | just set it. No need to check for constant symbols here, |
| 3198 | since that was already done by specbind. */ | 3198 | since that was already done by specbind. */ |
| 3199 | Lisp_Object symbol = specpdl_symbol (specpdl_ptr); | 3199 | Lisp_Object sym = specpdl_symbol (specpdl_ptr); |
| 3200 | if (SYMBOLP (symbol)) | 3200 | if (SYMBOLP (sym) && XSYMBOL (sym)->redirect == SYMBOL_PLAINVAL) |
| 3201 | { | 3201 | { |
| 3202 | struct Lisp_Symbol *sym = XSYMBOL (symbol); | 3202 | SET_SYMBOL_VAL (XSYMBOL (sym), |
| 3203 | if (sym->redirect == SYMBOL_PLAINVAL) | 3203 | specpdl_old_value (specpdl_ptr)); |
| 3204 | { | 3204 | break; |
| 3205 | SET_SYMBOL_VAL (sym, specpdl_old_value (specpdl_ptr)); | ||
| 3206 | break; | ||
| 3207 | } | ||
| 3208 | } | 3205 | } |
| 3209 | else | 3206 | else |
| 3210 | { /* FALLTHROUGH!! | 3207 | { /* FALLTHROUGH!! |
| @@ -3412,12 +3409,12 @@ backtrace_eval_unrewind (int distance) | |||
| 3412 | { /* If variable has a trivial value (no forwarding), we can | 3409 | { /* If variable has a trivial value (no forwarding), we can |
| 3413 | just set it. No need to check for constant symbols here, | 3410 | just set it. No need to check for constant symbols here, |
| 3414 | since that was already done by specbind. */ | 3411 | since that was already done by specbind. */ |
| 3415 | struct Lisp_Symbol *sym = XSYMBOL (specpdl_symbol (tmp)); | 3412 | Lisp_Object sym = specpdl_symbol (tmp); |
| 3416 | if (sym->redirect == SYMBOL_PLAINVAL) | 3413 | if (SYMBOLP (sym) && XSYMBOL (sym)->redirect == SYMBOL_PLAINVAL) |
| 3417 | { | 3414 | { |
| 3418 | Lisp_Object old_value = specpdl_old_value (tmp); | 3415 | Lisp_Object old_value = specpdl_old_value (tmp); |
| 3419 | set_specpdl_old_value (tmp, SYMBOL_VAL (sym)); | 3416 | set_specpdl_old_value (tmp, SYMBOL_VAL (XSYMBOL (sym))); |
| 3420 | SET_SYMBOL_VAL (sym, old_value); | 3417 | SET_SYMBOL_VAL (XSYMBOL (sym), old_value); |
| 3421 | break; | 3418 | break; |
| 3422 | } | 3419 | } |
| 3423 | else | 3420 | else |