{ XD_END }
};
-DEFINE_BASIC_LRECORD_IMPLEMENTATION ("symbol", symbol,
- mark_symbol, print_symbol, 0, 0, 0,
- symbol_description, 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);
\f
/**********************************************************************/
}
Lisp_Object
-intern (CONST char *str)
+intern (const char *str)
{
Bytecount len = strlen (str);
- CONST Bufbyte *buf = (CONST Bufbyte *) str;
+ const Bufbyte *buf = (const Bufbyte *) str;
Lisp_Object obarray = Vobarray;
if (!VECTORP (obarray) || XVECTOR_LENGTH (obarray) == 0)
Also store the bucket number in oblookup_last_bucket_number. */
Lisp_Object
-oblookup (Lisp_Object obarray, CONST Bufbyte *ptr, Bytecount size)
+oblookup (Lisp_Object obarray, const Bufbyte *ptr, Bytecount size)
{
int hash, obsize;
Lisp_Symbol *tail;
#if 0 /* Emacs 19.34 */
int
-hash_string (CONST Bufbyte *ptr, Bytecount len)
+hash_string (const Bufbyte *ptr, Bytecount len)
{
- CONST Bufbyte *p = ptr;
- CONST Bufbyte *end = p + len;
+ const Bufbyte *p = ptr;
+ const Bufbyte *end = p + len;
Bufbyte c;
int hash = 0;
/* derived from hashpjw, Dragon Book P436. */
int
-hash_string (CONST Bufbyte *ptr, Bytecount len)
+hash_string (const Bufbyte *ptr, Bytecount len)
{
int hash = 0;
do_symval_forwarding (Lisp_Object valcontents, struct buffer *buffer,
struct console *console)
{
- CONST struct symbol_value_forward *fwd;
+ const struct symbol_value_forward *fwd;
if (!SYMBOL_VALUE_MAGIC_P (valcontents))
return valcontents;
or symbol-value-buffer-local, and if there's a handler, we should
have already called it. */
Lisp_Object valcontents = fetch_value_maybe_past_magic (sym, Qt);
- CONST struct symbol_value_forward *fwd
+ const struct symbol_value_forward *fwd
= XSYMBOL_VALUE_FORWARD (valcontents);
int offset = ((char *) symbol_value_forward_forward (fwd)
- (char *) &buffer_local_flags);
or symbol-value-buffer-local, and if there's a handler, we should
have already called it. */
Lisp_Object valcontents = fetch_value_maybe_past_magic (sym, Qt);
- CONST struct symbol_value_forward *fwd
+ const struct symbol_value_forward *fwd
= XSYMBOL_VALUE_FORWARD (valcontents);
int offset = ((char *) symbol_value_forward_forward (fwd)
- (char *) &console_local_flags);
}
else
{
- CONST struct symbol_value_forward *fwd = XSYMBOL_VALUE_FORWARD (ovalue);
+ const struct symbol_value_forward *fwd = XSYMBOL_VALUE_FORWARD (ovalue);
int (*magicfun) (Lisp_Object simm, Lisp_Object *val,
Lisp_Object in_object, int flags)
= symbol_value_forward_magicfun (fwd);
case SYMVAL_CURRENT_BUFFER_FORWARD:
{
- CONST struct symbol_value_forward *fwd
+ const struct symbol_value_forward *fwd
= XSYMBOL_VALUE_FORWARD (valcontents);
int mask = XINT (*((Lisp_Object *)
symbol_value_forward_forward (fwd)));
case SYMVAL_SELECTED_CONSOLE_FORWARD:
{
- CONST struct symbol_value_forward *fwd
+ const struct symbol_value_forward *fwd
= XSYMBOL_VALUE_FORWARD (valcontents);
int mask = XINT (*((Lisp_Object *)
symbol_value_forward_forward (fwd)));
case SYMVAL_CURRENT_BUFFER_FORWARD:
{
- CONST struct symbol_value_forward *fwd
+ const struct symbol_value_forward *fwd
= XSYMBOL_VALUE_FORWARD (valcontents);
return (*((Lisp_Object *)((char *) XBUFFER (Vbuffer_defaults)
+ ((char *)symbol_value_forward_forward (fwd)
case SYMVAL_SELECTED_CONSOLE_FORWARD:
{
- CONST struct symbol_value_forward *fwd
+ const struct symbol_value_forward *fwd
= XSYMBOL_VALUE_FORWARD (valcontents);
return (*((Lisp_Object *)((char *) XCONSOLE (Vconsole_defaults)
+ ((char *)symbol_value_forward_forward (fwd)
case SYMVAL_CURRENT_BUFFER_FORWARD:
{
- CONST struct symbol_value_forward *fwd
+ const struct symbol_value_forward *fwd
= XSYMBOL_VALUE_FORWARD (valcontents);
int offset = ((char *) symbol_value_forward_forward (fwd)
- (char *) &buffer_local_flags);
case SYMVAL_SELECTED_CONSOLE_FORWARD:
{
- CONST struct symbol_value_forward *fwd
+ const struct symbol_value_forward *fwd
= XSYMBOL_VALUE_FORWARD (valcontents);
int offset = ((char *) symbol_value_forward_forward (fwd)
- (char *) &console_local_flags);
case SYMVAL_CURRENT_BUFFER_FORWARD:
{
- CONST struct symbol_value_forward *fwd
+ const struct symbol_value_forward *fwd
= XSYMBOL_VALUE_FORWARD (valcontents);
int mask = XINT (*((Lisp_Object *)
symbol_value_forward_forward (fwd)));
/* some losing systems can't have static vars at function scope... */
static struct symbol_value_magic guts_of_unbound_marker =
- { { symbol_value_forward_lheader_initializer, 0, 69},
- SYMVAL_UNBOUND_MARKER };
+{ /* struct symbol_value_magic */
+ { /* struct lcrecord_header */
+ { /* struct lrecord_header */
+ 1, /* type - index into lrecord_implementations_table */
+ 0, /* mark */
+ 0, /* c_readonly */
+ 0, /* lisp_readonly */
+ },
+ 0, /* next */
+ 0, /* uid */
+ 0, /* free */
+ },
+ 0, /* value */
+ SYMVAL_UNBOUND_MARKER
+};
void
init_symbols_once_early (void)
/* Bootstrapping problem: Qnil isn't set when make_string_nocopy is
called the first time. */
- Qnil = Fmake_symbol (make_string_nocopy ((CONST Bufbyte *) "nil", 3));
+ Qnil = Fmake_symbol (make_string_nocopy ((const Bufbyte *) "nil", 3));
XSYMBOL (Qnil)->name->plist = Qnil;
XSYMBOL (Qnil)->value = Qnil; /* Nihil ex nihil */
XSYMBOL (Qnil)->plist = Qnil;
XSETSYMBOL_VALUE_MAGIC (Qunbound, tem);
}
- if ((CONST void *) XPNTR (Qunbound) !=
- (CONST void *)&guts_of_unbound_marker)
+ if ((const void *) XPNTR (Qunbound) !=
+ (const void *)&guts_of_unbound_marker)
{
/* This might happen on DATA_SEG_BITS machines. */
/* abort (); */
}
void
-defsymbol_nodump (Lisp_Object *location, CONST char *name)
+defsymbol_nodump (Lisp_Object *location, const char *name)
{
- *location = Fintern (make_string_nocopy ((CONST Bufbyte *) name,
+ *location = Fintern (make_string_nocopy ((const Bufbyte *) name,
strlen (name)),
Qnil);
staticpro_nodump (location);
}
void
-defsymbol (Lisp_Object *location, CONST char *name)
+defsymbol (Lisp_Object *location, const char *name)
{
- *location = Fintern (make_string_nocopy ((CONST Bufbyte *) name,
+ *location = Fintern (make_string_nocopy ((const Bufbyte *) name,
strlen (name)),
Qnil);
staticpro (location);
}
void
-defkeyword (Lisp_Object *location, CONST char *name)
+defkeyword (Lisp_Object *location, const char *name)
{
defsymbol (location, name);
Fset (*location, *location);
if (initialized) { \
Lisp_Subr *newsubr = (Lisp_Subr *) xmalloc (sizeof (Lisp_Subr)); \
memcpy (newsubr, subr, sizeof (Lisp_Subr)); \
- subr->doc = (CONST char *)newsubr; \
+ subr->doc = (const char *)newsubr; \
subr = newsubr; \
} \
} while (0)
}
void
-deferror (Lisp_Object *symbol, CONST char *name, CONST char *messuhhj,
+deferror (Lisp_Object *symbol, const char *name, const char *messuhhj,
Lisp_Object inherits_from)
{
Lisp_Object conds;
/* Create and initialize a Lisp variable whose value is forwarded to C data */
void
-defvar_magic (CONST char *symbol_name, CONST struct symbol_value_forward *magic)
+defvar_magic (const char *symbol_name, const struct symbol_value_forward *magic)
{
Lisp_Object sym, kludge;
sym = Fintern (build_string (symbol_name), Qnil);
else
#endif
- sym = Fintern (make_string_nocopy ((CONST Bufbyte *) symbol_name,
+ sym = Fintern (make_string_nocopy ((const Bufbyte *) symbol_name,
strlen (symbol_name)), Qnil);
XSETOBJ (XSYMBOL (sym)->value, Lisp_Type_Record, magic);