summaryrefslogtreecommitdiff
path: root/src/bytecode.c
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2011-03-30 14:04:11 -0400
committerStefan Monnier <monnier@iro.umontreal.ca>2011-03-30 14:04:11 -0400
commit1c470562971bd86b1767ceb9ae95ece71228549f (patch)
tree995ae6f1b4f185181fa2b3ffe58bcae7dbbf54cc /src/bytecode.c
parenta5954fa5c84101c99857ea65196ef9050138119f (diff)
* src/bytecode.c (Fbyte_code): CAR and CDR can GC.
Diffstat (limited to 'src/bytecode.c')
-rw-r--r--src/bytecode.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/bytecode.c b/src/bytecode.c
index ce2f06dfcc..a7be8e26f2 100644
--- a/src/bytecode.c
+++ b/src/bytecode.c
@@ -554,7 +554,16 @@ If the third argument is incorrect, Emacs may crash. */)
{
Lisp_Object v1;
v1 = TOP;
- TOP = CAR (v1);
+ if (CONSP (v1))
+ TOP = XCAR (v1);
+ else if (NILP (v1))
+ TOP = Qnil;
+ else
+ {
+ BEFORE_POTENTIAL_GC ();
+ wrong_type_argument (Qlistp, v1);
+ AFTER_POTENTIAL_GC ();
+ }
break;
}
@@ -580,7 +589,17 @@ If the third argument is incorrect, Emacs may crash. */)
{
Lisp_Object v1;
v1 = TOP;
- TOP = CDR (v1);
+ if (CONSP (v1))
+ TOP = XCDR (v1);
+ else if (NILP (v1))
+ TOP = Qnil;
+ else
+ {
+ BEFORE_POTENTIAL_GC ();
+ wrong_type_argument (Qlistp, v1);
+ AFTER_POTENTIAL_GC ();
+ }
+ break;
break;
}
@@ -911,13 +930,13 @@ If the third argument is incorrect, Emacs may crash. */)
v1 = POP;
v2 = TOP;
CHECK_NUMBER (v2);
- AFTER_POTENTIAL_GC ();
op = XINT (v2);
immediate_quit = 1;
while (--op >= 0 && CONSP (v1))
v1 = XCDR (v1);
immediate_quit = 0;
TOP = CAR (v1);
+ AFTER_POTENTIAL_GC ();
break;
}