From: João Távora Date: Wed, 22 Sep 2021 22:53:15 +0000 (+0100) Subject: Add mechanism for escaping shorthand substitution X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a2df797f8321f411bce8997ddcd11f74d3f74df1;p=emacs.git Add mechanism for escaping shorthand substitution * src/lread.c (read1): Add skip_shorthand variable. Add a '#\' case. Sometimes call oblookup instead of oblookup_considering_shorthand. --- diff --git a/src/lread.c b/src/lread.c index c68c04e572a..509e834f693 100644 --- a/src/lread.c +++ b/src/lread.c @@ -2972,6 +2972,7 @@ read1 (Lisp_Object readcharfun, int *pch, bool first_in_list) { int c; bool uninterned_symbol = false; + bool skip_shorthand = false; bool multibyte; char stackbuf[stackbufsize]; current_thread->stack_top = stackbuf; @@ -3367,6 +3368,7 @@ read1 (Lisp_Object readcharfun, int *pch, bool first_in_list) if (c == ':') { uninterned_symbol = true; + read_hash_prefixed_symbol: c = READCHAR; if (!(c > 040 && c != NO_BREAK_SPACE @@ -3380,6 +3382,12 @@ read1 (Lisp_Object readcharfun, int *pch, bool first_in_list) } goto read_symbol; } + /* #/foo is the shorthand-oblivious symbol named foo. */ + if (c == '\\') + { + skip_shorthand = true; + goto read_hash_prefixed_symbol; + } /* ## is the empty symbol. */ if (c == '#') return Fintern (empty_unibyte_string, Qnil); @@ -3760,7 +3768,7 @@ read1 (Lisp_Object readcharfun, int *pch, bool first_in_list) ptrdiff_t nbytes = p - read_buffer; UNREAD (c); - if (!quoted && !uninterned_symbol) + if (!quoted && !uninterned_symbol && !skip_shorthand) { ptrdiff_t len; Lisp_Object result = string_to_number (read_buffer, 10, &len); @@ -3795,10 +3803,14 @@ read1 (Lisp_Object readcharfun, int *pch, bool first_in_list) ptrdiff_t longhand_chars = 0; ptrdiff_t longhand_bytes = 0; - Lisp_Object tem - = oblookup_considering_shorthand + Lisp_Object tem; + if (skip_shorthand) + tem = oblookup (obarray, read_buffer, nchars, nbytes); + else { + tem = oblookup_considering_shorthand (obarray, read_buffer, nchars, nbytes, &longhand, &longhand_chars, &longhand_bytes); + } if (SYMBOLP (tem)) result = tem;