# HG changeset patch # User Richard M. Stallman # Date 813103299 0 # Node ID 6182d95acd141d1c3ad7e06422b8ad83c1c4cd3c # Parent 4ce211a90724951f9523347fb7efb31802292b2a (read1): Handle chartables and boolvectors. diff -r 4ce211a90724 -r 6182d95acd14 src/lread.c --- a/src/lread.c Sat Oct 07 22:00:06 1995 +0000 +++ b/src/lread.c Sat Oct 07 22:01:39 1995 +0000 @@ -1180,6 +1180,46 @@ case '#': c = READCHAR; + if (c == '^') + { + c = READCHAR; + if (c == '[') + { + Lisp_Object tmp; + tmp = read_vector (readcharfun); + if (XVECTOR (tmp)->size < CHAR_TABLE_STANDARD_SLOTS + || XVECTOR (tmp)->size > CHAR_TABLE_STANDARD_SLOTS + 10) + error ("Invalid size char-table"); + XSETCHAR_TABLE (tmp, XCHAR_TABLE (tmp)); + return tmp; + } + Fsignal (Qinvalid_read_syntax, Fcons (make_string ("#^", 2), Qnil)); + } + if (c == '&') + { + Lisp_Object length; + length = read1 (readcharfun, pch, first_in_list); + c = READCHAR; + if (c == '"') + { + Lisp_Object tmp, val; + int bits_per_char = INTBITS / sizeof (int); + int size_in_chars = ((XFASTINT (length) + bits_per_char) + / bits_per_char); + + UNREAD (c); + tmp = read1 (readcharfun, pch, first_in_list); + if (size_in_chars != XSTRING (tmp)->size) + Fsignal (Qinvalid_read_syntax, + Fcons (make_string ("#&", 2), Qnil)); + + val = Fmake_bool_vector (length, Qnil); + bcopy (XSTRING (tmp)->data, XBOOL_VECTOR (val)->data, + size_in_chars); + return val; + } + Fsignal (Qinvalid_read_syntax, Fcons (make_string ("#&", 2), Qnil)); + } if (c == '[') { /* Accept compiled functions at read-time so that we don't have to