summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ChangeLog4
-rw-r--r--src/bytecode.c25
2 files changed, 26 insertions, 3 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 2df49ff31b..0b0ed2ed77 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,7 @@
+2011-03-30 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * bytecode.c (Fbyte_code): CAR and CDR can GC.
+
2011-03-30 Zachary Kanfer <zkanfer@gmail.com> (tiny change)
* keyboard.c (Fexecute_extended_command): Do log the "suggest key
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;
}