diff options
Diffstat (limited to 'src/bytecode.c')
-rw-r--r-- | src/bytecode.c | 92 |
1 files changed, 54 insertions, 38 deletions
diff --git a/src/bytecode.c b/src/bytecode.c index 21e89d372c2..4a10d6091e7 100644 --- a/src/bytecode.c +++ b/src/bytecode.c @@ -524,15 +524,19 @@ If the third argument is incorrect, Emacs may crash. */) } case Bgotoifnil: - MAYBE_GC (); - op = FETCH2; - if (NILP (POP)) - { - BYTE_CODE_QUIT; - CHECK_RANGE (op); - stack.pc = stack.byte_string_start + op; - } - break; + { + Lisp_Object v1; + MAYBE_GC (); + op = FETCH2; + v1 = POP; + if (NILP (v1)) + { + BYTE_CODE_QUIT; + CHECK_RANGE (op); + stack.pc = stack.byte_string_start + op; + } + break; + } case Bcar: { @@ -730,15 +734,19 @@ If the third argument is incorrect, Emacs may crash. */) break; case Bgotoifnonnil: - MAYBE_GC (); - op = FETCH2; - if (!NILP (POP)) - { - BYTE_CODE_QUIT; - CHECK_RANGE (op); - stack.pc = stack.byte_string_start + op; - } - break; + { + Lisp_Object v1; + MAYBE_GC (); + op = FETCH2; + v1 = POP; + if (!NILP (v1)) + { + BYTE_CODE_QUIT; + CHECK_RANGE (op); + stack.pc = stack.byte_string_start + op; + } + break; + } case Bgotoifnilelsepop: MAYBE_GC (); @@ -771,24 +779,32 @@ If the third argument is incorrect, Emacs may crash. */) break; case BRgotoifnil: - MAYBE_GC (); - if (NILP (POP)) - { - BYTE_CODE_QUIT; - stack.pc += (int) *stack.pc - 128; - } - stack.pc++; - break; + { + Lisp_Object v1; + MAYBE_GC (); + v1 = POP; + if (NILP (v1)) + { + BYTE_CODE_QUIT; + stack.pc += (int) *stack.pc - 128; + } + stack.pc++; + break; + } case BRgotoifnonnil: - MAYBE_GC (); - if (!NILP (POP)) - { - BYTE_CODE_QUIT; - stack.pc += (int) *stack.pc - 128; - } - stack.pc++; - break; + { + Lisp_Object v1; + MAYBE_GC (); + v1 = POP; + if (!NILP (v1)) + { + BYTE_CODE_QUIT; + stack.pc += (int) *stack.pc - 128; + } + stack.pc++; + break; + } case BRgotoifnilelsepop: MAYBE_GC (); @@ -861,11 +877,11 @@ If the third argument is incorrect, Emacs may crash. */) case Bcondition_case: { - Lisp_Object v1; - v1 = POP; - v1 = Fcons (POP, v1); + Lisp_Object handlers, body; + handlers = POP; + body = POP; BEFORE_POTENTIAL_GC (); - TOP = Fcondition_case (Fcons (TOP, v1)); + TOP = internal_lisp_condition_case (TOP, body, handlers); AFTER_POTENTIAL_GC (); break; } |