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 */
 }