summaryrefslogtreecommitdiff
path: root/src/bytecode.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bytecode.c')
-rw-r--r--src/bytecode.c92
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;
}