diff options
Diffstat (limited to 'src/fns.c')
-rw-r--r-- | src/fns.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/fns.c b/src/fns.c index 7b9142d4718..9f39d56dd33 100644 --- a/src/fns.c +++ b/src/fns.c @@ -2414,6 +2414,11 @@ It can be retrieved with `(get SYMBOL PROPNAME)'. */) (Lisp_Object symbol, Lisp_Object propname, Lisp_Object value) { CHECK_SYMBOL (symbol); + if (symbols_with_pos_enabled) + { + propname = call1 (intern ("macroexp-strip-symbol-positions"), propname); + value = call1 (intern ("macroexp-strip-symbol-positions"), value); + } set_symbol_plist (symbol, Fplist_put (XSYMBOL (symbol)->u.s.plist, propname, value)); return value; @@ -2569,6 +2574,13 @@ internal_equal (Lisp_Object o1, Lisp_Object o2, enum equal_kind equal_kind, } } + /* A symbol with position compares the contained symbol, and is + `equal' to the corresponding ordinary symbol. */ + if (SYMBOL_WITH_POS_P (o1)) + o1 = SYMBOL_WITH_POS_SYM (o1); + if (SYMBOL_WITH_POS_P (o2)) + o2 = SYMBOL_WITH_POS_SYM (o2); + if (EQ (o1, o2)) return true; if (XTYPE (o1) != XTYPE (o2)) @@ -4479,7 +4491,10 @@ hash_lookup (struct Lisp_Hash_Table *h, Lisp_Object key, Lisp_Object *hash) { ptrdiff_t start_of_bucket, i; - Lisp_Object hash_code = h->test.hashfn (key, h); + Lisp_Object hash_code; + if (SYMBOL_WITH_POS_P (key)) + key = SYMBOL_WITH_POS_SYM (key); + hash_code = h->test.hashfn (key, h); if (hash) *hash = hash_code; |