plist module
authorBT Templeton <bt@hcoop.net>
Sat, 17 Aug 2013 20:31:30 +0000 (16:31 -0400)
committerRobin Templeton <robin@terpri.org>
Sun, 19 Apr 2015 07:43:02 +0000 (03:43 -0400)
src/alloc.c
src/emacs.c
src/lisp.h

index be38f3e..38a5482 100644 (file)
@@ -1180,7 +1180,7 @@ initialize_symbol (Lisp_Object val, Lisp_Object name)
   p = XSYMBOL (val);
   p->self = val;
   set_symbol_name (val, name);
-  set_symbol_plist (val, Qnil);
+  scm_module_define (plist_module, val, Qnil);
   p->redirect = SYMBOL_PLAINVAL;
   SET_SYMBOL_VAL (p, Qunbound);
   scm_module_define (function_module, val, Qnil);
index f013bbf..d4611f8 100644 (file)
@@ -109,6 +109,7 @@ extern void moncontrol (int mode);
 
 Lisp_Object symbol_module;
 Lisp_Object function_module;
+Lisp_Object plist_module;
 
 static const char emacs_version[] = PACKAGE_VERSION;
 static const char emacs_copyright[] = COPYRIGHT;
@@ -1177,6 +1178,12 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
                                   scm_from_locale_keyword ("pure"),
                                   SCM_BOOL_T,
                                   SCM_UNDEFINED);
+      plist_module = scm_call (scm_c_public_ref ("guile", "define-module*"),
+                                  scm_list_1 (scm_from_utf8_symbol ("elisp-plists")),
+                                  scm_from_locale_keyword ("pure"),
+                                  SCM_BOOL_T,
+                                  SCM_UNDEFINED);
+
       init_alloc_once ();
       init_guile ();
       init_fns_once ();
index c4c5344..ca44ab9 100644 (file)
@@ -648,6 +648,7 @@ extern void initialize_symbol (Lisp_Object, Lisp_Object);
 INLINE Lisp_Object build_string (const char *);
 extern Lisp_Object symbol_module;
 extern Lisp_Object function_module;
+extern Lisp_Object plist_module;
 
 INLINE struct Lisp_Symbol *
 XSYMBOL (Lisp_Object a)
@@ -1338,9 +1339,6 @@ struct Lisp_Symbol
     struct Lisp_Buffer_Local_Value *blv;
     union Lisp_Fwd *fwd;
   } val;
-
-  /* The symbol's property list.  */
-  Lisp_Object plist;
 };
 
 /* Value is name of symbol.  */
@@ -2766,13 +2764,13 @@ set_symbol_function (Lisp_Object sym, Lisp_Object function)
 INLINE Lisp_Object
 symbol_plist (Lisp_Object sym)
 {
-  return XSYMBOL (sym)->plist;
+  return scm_variable_ref (scm_module_lookup (plist_module, sym));
 }
 
 INLINE void
 set_symbol_plist (Lisp_Object sym, Lisp_Object plist)
 {
-  XSYMBOL (sym)->plist = plist;
+  scm_variable_set_x (scm_module_lookup (plist_module, sym), plist);
 }
 
 /* Buffer-local (also frame-local) variable access functions.  */