-DEFINE_BASIC_LRECORD_IMPLEMENTATION ("symbol", symbol,
- mark_symbol, print_symbol, 0, 0, 0,
- symbol_description, struct Lisp_Symbol);
+/* Symbol plists are directly accessible, so we need to protect against
+ invalid property list structure */
+
+static Lisp_Object
+symbol_getprop (Lisp_Object symbol, Lisp_Object property)
+{
+ return external_plist_get (&XSYMBOL (symbol)->plist, property, 0, ERROR_ME);
+}
+
+static int
+symbol_putprop (Lisp_Object symbol, Lisp_Object property, Lisp_Object value)
+{
+ external_plist_put (&XSYMBOL (symbol)->plist, property, value, 0, ERROR_ME);
+ return 1;
+}
+
+static int
+symbol_remprop (Lisp_Object symbol, Lisp_Object property)
+{
+ return external_remprop (&XSYMBOL (symbol)->plist, property, 0, ERROR_ME);
+}
+
+DEFINE_BASIC_LRECORD_IMPLEMENTATION_WITH_PROPS ("symbol", symbol,
+ mark_symbol, print_symbol,
+ 0, 0, 0, symbol_description,
+ symbol_getprop,
+ symbol_putprop,
+ symbol_remprop,
+ Fsymbol_plist,
+ Lisp_Symbol);