Mercurial > hg > xemacs-beta
diff src/rangetab.c @ 5222:18c0b5909d16
Use keywords in structure syntax; new #define, NEED_TO_HANDLE_21_4_CODE 1
src/ChangeLog addition:
2010-05-31 Aidan Kehoe <kehoea@parhasard.net>
* rangetab.c (print_range_table, rangetab_instantiate)
(structure_type_create_rangetab):
* chartab.c (print_char_table, chartab_instantiate)
(structure_type_create_chartab):
* faces.c (syms_of_faces, print_face, face_validate):
Move structure syntax in these files to using keywords by default,
as is done in Common Lisp and GNU Emacs, accepting for the moment
the older non-keywords syntax too.
* glyphs.h: No need to have Q_data here.
* general-slots.h: Add Q_data, Q_type here.
* config.h.in (NEED_TO_HANDLE_21_4_CODE):
New #define, always 1 for the moment, replacing the previous
never-really-used NO_NEED_TO_HANDLE_21_4_CODE, and avoiding
confusing syntax.
* eval.c (Ffuncall): Wrap the hack that allows #'throw to be
funcalled in #ifdef NEED_TO_HANDLE_21_4_CODE.
* elhash.c (syms_of_elhash): Move Q_type, Q_data to
general-slots.h. Change to NEED_TO_HANDLE_21_4_CODE throughout
this file.
lisp/ChangeLog addition:
2010-05-31 Aidan Kehoe <kehoea@parhasard.net>
* specifier.el (current-display-table):
Use keywords in the structure syntax here, now we've moved to that
by default in C.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Mon, 31 May 2010 16:47:44 +0100 |
parents | 71ee43b8a74d |
children | 308d34e9f07d |
line wrap: on
line diff
--- a/src/rangetab.c Sun May 30 15:16:07 2010 +0100 +++ b/src/rangetab.c Mon May 31 16:47:44 2010 +0100 @@ -104,7 +104,7 @@ int i; if (print_readably) - write_fmt_string_lisp (printcharfun, "#s(range-table type %s data (", + write_fmt_string_lisp (printcharfun, "#s(range-table :type %s :data (", 1, range_table_type_to_symbol (rt->type)); else write_ascstring (printcharfun, "#<range-table "); @@ -790,13 +790,38 @@ { Lisp_Object data = Qnil, type = Qnil, rangetab; - PROPERTY_LIST_LOOP_3 (key, value, plist) + if (KEYWORDP (Fcar (plist))) { - if (EQ (key, Qtype)) type = value; - else if (EQ (key, Qdata)) data = value; - else - ABORT (); + PROPERTY_LIST_LOOP_3 (key, value, plist) + { + if (EQ (key, Q_type)) type = value; + else if (EQ (key, Q_data)) data = value; + else if (!KEYWORDP (key)) + signal_error + (Qinvalid_read_syntax, + "can't mix keyword and non-keyword structure syntax", + key); + else + ABORT (); + } } +#ifdef NEED_TO_HANDLE_21_4_CODE + else + { + PROPERTY_LIST_LOOP_3 (key, value, plist) + { + if (EQ (key, Qtype)) type = value; + else if (EQ (key, Qdata)) data = value; + else if (KEYWORDP (key)) + signal_error + (Qinvalid_read_syntax, + "can't mix keyword and non-keyword structure syntax", + key); + else + ABORT (); + } + } +#endif /* NEED_TO_HANDLE_21_4_CODE */ rangetab = Fmake_range_table (type); @@ -1042,6 +1067,10 @@ st = define_structure_type (Qrange_table, 0, rangetab_instantiate); + define_structure_type_keyword (st, Q_data, rangetab_data_validate); + define_structure_type_keyword (st, Q_type, rangetab_type_validate); +#ifdef NEED_TO_HANDLE_21_4_CODE define_structure_type_keyword (st, Qdata, rangetab_data_validate); define_structure_type_keyword (st, Qtype, rangetab_type_validate); +#endif /* NEED_TO_HANDLE_21_4_CODE */ }