aboutsummaryrefslogtreecommitdiffstats
path: root/src/bytecode.c
diff options
context:
space:
mode:
authorStefan Monnier2011-03-31 00:24:03 -0400
committerStefan Monnier2011-03-31 00:24:03 -0400
commit40d83b412f584cc02e68d4eac8fd5e6eb769e2fe (patch)
treeb56f27a7e6d75a8c1fd27b00179a27b5efea0a32 /src/bytecode.c
parentf488fb6528738131ef41859e1f04125f2e50efce (diff)
parent44f230aa043ebb222aa0876b44d70484d5dd38db (diff)
downloademacs-40d83b412f584cc02e68d4eac8fd5e6eb769e2fe.tar.gz
emacs-40d83b412f584cc02e68d4eac8fd5e6eb769e2fe.zip
Merge from trunk
Diffstat (limited to 'src/bytecode.c')
-rw-r--r--src/bytecode.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/src/bytecode.c b/src/bytecode.c
index d887668dd39..01ae8055ebf 100644
--- a/src/bytecode.c
+++ b/src/bytecode.c
@@ -425,7 +425,7 @@ according to which any remaining arguments are pushed on the stack
425before executing BYTESTR. 425before executing BYTESTR.
426 426
427usage: (byte-code BYTESTR VECTOR MAXDEP &optional ARGS-TEMPLATE &rest ARGS) */) 427usage: (byte-code BYTESTR VECTOR MAXDEP &optional ARGS-TEMPLATE &rest ARGS) */)
428 (int nargs, Lisp_Object *args) 428 (size_t nargs, Lisp_Object *args)
429{ 429{
430 Lisp_Object args_tmpl = nargs >= 4 ? args[3] : Qnil; 430 Lisp_Object args_tmpl = nargs >= 4 ? args[3] : Qnil;
431 int pnargs = nargs >= 4 ? nargs - 4 : 0; 431 int pnargs = nargs >= 4 ? nargs - 4 : 0;
@@ -631,7 +631,16 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
631 { 631 {
632 Lisp_Object v1; 632 Lisp_Object v1;
633 v1 = TOP; 633 v1 = TOP;
634 TOP = CAR (v1); 634 if (CONSP (v1))
635 TOP = XCAR (v1);
636 else if (NILP (v1))
637 TOP = Qnil;
638 else
639 {
640 BEFORE_POTENTIAL_GC ();
641 wrong_type_argument (Qlistp, v1);
642 AFTER_POTENTIAL_GC ();
643 }
635 break; 644 break;
636 } 645 }
637 646
@@ -657,7 +666,17 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
657 { 666 {
658 Lisp_Object v1; 667 Lisp_Object v1;
659 v1 = TOP; 668 v1 = TOP;
660 TOP = CDR (v1); 669 if (CONSP (v1))
670 TOP = XCDR (v1);
671 else if (NILP (v1))
672 TOP = Qnil;
673 else
674 {
675 BEFORE_POTENTIAL_GC ();
676 wrong_type_argument (Qlistp, v1);
677 AFTER_POTENTIAL_GC ();
678 }
679 break;
661 break; 680 break;
662 } 681 }
663 682
@@ -994,13 +1013,13 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
994 v1 = POP; 1013 v1 = POP;
995 v2 = TOP; 1014 v2 = TOP;
996 CHECK_NUMBER (v2); 1015 CHECK_NUMBER (v2);
997 AFTER_POTENTIAL_GC ();
998 op = XINT (v2); 1016 op = XINT (v2);
999 immediate_quit = 1; 1017 immediate_quit = 1;
1000 while (--op >= 0 && CONSP (v1)) 1018 while (--op >= 0 && CONSP (v1))
1001 v1 = XCDR (v1); 1019 v1 = XCDR (v1);
1002 immediate_quit = 0; 1020 immediate_quit = 0;
1003 TOP = CAR (v1); 1021 TOP = CAR (v1);
1022 AFTER_POTENTIAL_GC ();
1004 break; 1023 break;
1005 } 1024 }
1006 1025