mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-02 10:11:05 -08:00
(read1--strings with properties case):
Detect end of list, and invalid syntax, using recursive read1 calls. (read1): Handle reading strings with properties.
This commit is contained in:
parent
d4b530ad2d
commit
748ef62fff
1 changed files with 43 additions and 3 deletions
46
src/lread.c
46
src/lread.c
|
|
@ -899,11 +899,51 @@ read1 (readcharfun)
|
|||
{
|
||||
/* Accept compiled functions at read-time so that we don't have to
|
||||
build them using function calls. */
|
||||
Lisp_Object tmp = read_vector (readcharfun);
|
||||
return Fmake_byte_code (XVECTOR(tmp)->size, XVECTOR (tmp)->contents);
|
||||
Lisp_Object tmp;
|
||||
tmp = read_vector (readcharfun);
|
||||
return Fmake_byte_code (XVECTOR (tmp)->size,
|
||||
XVECTOR (tmp)->contents);
|
||||
}
|
||||
#ifdef USE_TEXT_PROPERTIES
|
||||
if (c == '(')
|
||||
{
|
||||
Lisp_Object tmp;
|
||||
struct gcpro gcpro1;
|
||||
|
||||
/* Read the string itself. */
|
||||
tmp = read1 (readcharfun);
|
||||
if (XTYPE (tmp) != Lisp_String)
|
||||
Fsignal (Qinvalid_read_syntax, Fcons (make_string ("#", 1), Qnil));
|
||||
GCPRO1 (tmp);
|
||||
/* Read the intervals and their properties. */
|
||||
while (1)
|
||||
{
|
||||
Lisp_Object beg, end, plist;
|
||||
|
||||
beg = read1 (readcharfun);
|
||||
if (XTYPE (beg) == Lisp_Internal)
|
||||
{
|
||||
if (XINT (beg) == ')')
|
||||
break;
|
||||
Fsignal (Qinvalid_read_syntax, Fcons (make_string ("invalid string property list", 28), Qnil));
|
||||
}
|
||||
end = read1 (readcharfun);
|
||||
if (XTYPE (end) == Lisp_Internal)
|
||||
Fsignal (Qinvalid_read_syntax,
|
||||
Fcons (make_string ("invalid string property list", 28), Qnil));
|
||||
|
||||
plist = read1 (readcharfun);
|
||||
if (XTYPE (plist) == Lisp_Internal)
|
||||
Fsignal (Qinvalid_read_syntax,
|
||||
Fcons (make_string ("invalid string property list", 28), Qnil));
|
||||
Fset_text_properties (beg, end, plist, tmp);
|
||||
}
|
||||
UNGCPRO;
|
||||
return tmp;
|
||||
}
|
||||
#endif
|
||||
UNREAD (c);
|
||||
return Fsignal (Qinvalid_read_syntax, Fcons (make_string ("#", 1), Qnil));
|
||||
Fsignal (Qinvalid_read_syntax, Fcons (make_string ("#", 1), Qnil));
|
||||
|
||||
case ';':
|
||||
while ((c = READCHAR) >= 0 && c != '\n');
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue