summaryrefslogtreecommitdiff
path: root/src/print.c
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>2003-09-19 14:35:40 +0000
committerRichard M. Stallman <rms@gnu.org>2003-09-19 14:35:40 +0000
commit627c71fdb3b5009b062572f76e3385682142f6c9 (patch)
treeeb218679ee4ac5ca81f7a7cabdb036d9990fb1a0 /src/print.c
parent02a33b8089f4c5617495e67c296a83a35ac0f038 (diff)
downloademacs-627c71fdb3b5009b062572f76e3385682142f6c9.tar.gz
(Fprin1_to_string): Move the PRINTPREPARE later,
so that PRINTFINISH won't unbind Qinhibit_modification_hooks.
Diffstat (limited to 'src/print.c')
-rw-r--r--src/print.c35
1 files changed, 22 insertions, 13 deletions
diff --git a/src/print.c b/src/print.c
index bbb491dc584..5f1506392c2 100644
--- a/src/print.c
+++ b/src/print.c
@@ -758,33 +758,42 @@ A printed representation of an object is text which describes that object. */)
(object, noescape)
Lisp_Object object, noescape;
{
- PRINTDECLARE;
Lisp_Object printcharfun;
/* struct gcpro gcpro1, gcpro2; */
Lisp_Object save_deactivate_mark;
int count = specpdl_ptr - specpdl;
+ struct buffer *previous;
specbind (Qinhibit_modification_hooks, Qt);
- /* Save and restore this--we are altering a buffer
- but we don't want to deactivate the mark just for that.
- No need for specbind, since errors deactivate the mark. */
- save_deactivate_mark = Vdeactivate_mark;
- /* GCPRO2 (object, save_deactivate_mark); */
- abort_on_gc++;
+ {
+ PRINTDECLARE;
+
+ /* Save and restore this--we are altering a buffer
+ but we don't want to deactivate the mark just for that.
+ No need for specbind, since errors deactivate the mark. */
+ save_deactivate_mark = Vdeactivate_mark;
+ /* GCPRO2 (object, save_deactivate_mark); */
+ abort_on_gc++;
+
+ printcharfun = Vprin1_to_string_buffer;
+ PRINTPREPARE;
+ print (object, printcharfun, NILP (noescape));
+ /* Make Vprin1_to_string_buffer be the default buffer after PRINTFINSH */
+ PRINTFINISH;
+ }
- printcharfun = Vprin1_to_string_buffer;
- PRINTPREPARE;
- print (object, printcharfun, NILP (noescape));
- /* Make Vprin1_to_string_buffer be the default buffer after PRINTFINSH */
- PRINTFINISH;
+ previous = current_buffer;
set_buffer_internal (XBUFFER (Vprin1_to_string_buffer));
object = Fbuffer_string ();
if (SBYTES (object) == SCHARS (object))
STRING_SET_UNIBYTE (object);
+ /* Note that this won't make prepare_to_modify_buffer call
+ ask-user-about-supersession-threat because this buffer
+ does not visit a file. */
Ferase_buffer ();
- set_buffer_internal (old);
+ set_buffer_internal (previous);
Vdeactivate_mark = save_deactivate_mark;
/* UNGCPRO; */