Mercurial > emacs
changeset 52538:ecd666ee0ea1
(Fprin1_to_string): Move the PRINTPREPARE later,
so that PRINTFINISH won't unbind Qinhibit_modification_hooks.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Fri, 19 Sep 2003 14:35:40 +0000 |
parents | ab6a470dc45f |
children | 70b6f248b802 |
files | src/print.c |
diffstat | 1 files changed, 22 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/src/print.c Fri Sep 19 14:34:30 2003 +0000 +++ b/src/print.c Fri Sep 19 14:35:40 2003 +0000 @@ -758,33 +758,42 @@ (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; - printcharfun = Vprin1_to_string_buffer; - PRINTPREPARE; - print (object, printcharfun, NILP (noescape)); - /* Make Vprin1_to_string_buffer be the default buffer after PRINTFINSH */ - PRINTFINISH; + /* 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; + } + + 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; */