Mercurial > emacs
changeset 47864:c63e96671963
(print): When backquote form is the car of a list,
output in old style. Use old_backquote_output to output all
comma forms inside it in old style too.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Mon, 14 Oct 2002 01:30:26 +0000 |
parents | 9925c06ca5fb |
children | 22b1643144e9 |
files | src/print.c |
diffstat | 1 files changed, 28 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/print.c Mon Oct 14 01:28:36 2002 +0000 +++ b/src/print.c Mon Oct 14 01:30:26 2002 +0000 @@ -91,6 +91,9 @@ /* Avoid actual stack overflow in print. */ int print_depth; +/* Nonzero if inside outputting backquote in old style. */ +int old_backquote_output; + /* Detect most circularities to print finite output. */ #define PRINT_CIRCLE 200 Lisp_Object being_printed[PRINT_CIRCLE]; @@ -1154,6 +1157,7 @@ int escapeflag; { print_depth = 0; + old_backquote_output = 0; /* Reset print_number_index and Vprint_number_table only when the variable Vprint_continuous_numbering is nil. Otherwise, @@ -1582,6 +1586,7 @@ print_object (XCAR (XCDR (obj)), printcharfun, escapeflag); } else if (print_quoted && CONSP (XCDR (obj)) && NILP (XCDR (XCDR (obj))) + && ! old_backquote_output && ((EQ (XCAR (obj), Qbackquote) || EQ (XCAR (obj), Qcomma) || EQ (XCAR (obj), Qcomma_at) @@ -1593,6 +1598,29 @@ else { PRINTCHAR ('('); + + /* If the first element is a backquote form, + print it old-style so it won't be misunderstood. */ + if (print_quoted && CONSP (XCAR (obj)) + && CONSP (XCDR (XCAR (obj))) + && NILP (XCDR (XCDR (XCAR (obj)))) + && EQ (XCAR (XCAR (obj)), Qbackquote)) + { + Lisp_Object tem; + tem = XCAR (obj); + PRINTCHAR ('('); + + print_object (Qbackquote, printcharfun, 0); + PRINTCHAR (' '); + + ++old_backquote_output; + print_object (XCAR (XCDR (tem)), printcharfun, 0); + --old_backquote_output; + PRINTCHAR (')'); + + obj = XCDR (obj); + } + { int print_length, i; Lisp_Object halftail = obj;