mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-06-14 12:31:25 +00:00
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.
This commit is contained in:
parent
881478bca9
commit
a2df797f83
1 changed files with 15 additions and 3 deletions
18
src/lread.c
18
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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue