diff options
Diffstat (limited to 'src/lread.c')
| -rw-r--r-- | src/lread.c | 46 |
1 files changed, 43 insertions, 3 deletions
diff --git a/src/lread.c b/src/lread.c index 45b2265f49e..24671290ab3 100644 --- a/src/lread.c +++ b/src/lread.c | |||
| @@ -899,11 +899,51 @@ read1 (readcharfun) | |||
| 899 | { | 899 | { |
| 900 | /* Accept compiled functions at read-time so that we don't have to | 900 | /* Accept compiled functions at read-time so that we don't have to |
| 901 | build them using function calls. */ | 901 | build them using function calls. */ |
| 902 | Lisp_Object tmp = read_vector (readcharfun); | 902 | Lisp_Object tmp; |
| 903 | return Fmake_byte_code (XVECTOR(tmp)->size, XVECTOR (tmp)->contents); | 903 | tmp = read_vector (readcharfun); |
| 904 | return Fmake_byte_code (XVECTOR (tmp)->size, | ||
| 905 | XVECTOR (tmp)->contents); | ||
| 904 | } | 906 | } |
| 907 | #ifdef USE_TEXT_PROPERTIES | ||
| 908 | if (c == '(') | ||
| 909 | { | ||
| 910 | Lisp_Object tmp; | ||
| 911 | struct gcpro gcpro1; | ||
| 912 | |||
| 913 | /* Read the string itself. */ | ||
| 914 | tmp = read1 (readcharfun); | ||
| 915 | if (XTYPE (tmp) != Lisp_String) | ||
| 916 | Fsignal (Qinvalid_read_syntax, Fcons (make_string ("#", 1), Qnil)); | ||
| 917 | GCPRO1 (tmp); | ||
| 918 | /* Read the intervals and their properties. */ | ||
| 919 | while (1) | ||
| 920 | { | ||
| 921 | Lisp_Object beg, end, plist; | ||
| 922 | |||
| 923 | beg = read1 (readcharfun); | ||
| 924 | if (XTYPE (beg) == Lisp_Internal) | ||
| 925 | { | ||
| 926 | if (XINT (beg) == ')') | ||
| 927 | break; | ||
| 928 | Fsignal (Qinvalid_read_syntax, Fcons (make_string ("invalid string property list", 28), Qnil)); | ||
| 929 | } | ||
| 930 | end = read1 (readcharfun); | ||
| 931 | if (XTYPE (end) == Lisp_Internal) | ||
| 932 | Fsignal (Qinvalid_read_syntax, | ||
| 933 | Fcons (make_string ("invalid string property list", 28), Qnil)); | ||
| 934 | |||
| 935 | plist = read1 (readcharfun); | ||
| 936 | if (XTYPE (plist) == Lisp_Internal) | ||
| 937 | Fsignal (Qinvalid_read_syntax, | ||
| 938 | Fcons (make_string ("invalid string property list", 28), Qnil)); | ||
| 939 | Fset_text_properties (beg, end, plist, tmp); | ||
| 940 | } | ||
| 941 | UNGCPRO; | ||
| 942 | return tmp; | ||
| 943 | } | ||
| 944 | #endif | ||
| 905 | UNREAD (c); | 945 | UNREAD (c); |
| 906 | return Fsignal (Qinvalid_read_syntax, Fcons (make_string ("#", 1), Qnil)); | 946 | Fsignal (Qinvalid_read_syntax, Fcons (make_string ("#", 1), Qnil)); |
| 907 | 947 | ||
| 908 | case ';': | 948 | case ';': |
| 909 | while ((c = READCHAR) >= 0 && c != '\n'); | 949 | while ((c = READCHAR) >= 0 && c != '\n'); |