[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
scratch/lexspaces e2f183c 17/17: Shallow setters by default are not a go
From: |
Andrea Corallo |
Subject: |
scratch/lexspaces e2f183c 17/17: Shallow setters by default are not a good idea |
Date: |
Fri, 8 May 2020 16:43:09 -0400 (EDT) |
branch: scratch/lexspaces
commit e2f183cf1742b30d4cbd25aa54f7485006b63bfe
Author: Andrea Corallo <address@hidden>
Commit: Andrea Corallo <address@hidden>
Shallow setters by default are not a good idea
---
src/lisp.h | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/src/lisp.h b/src/lisp.h
index 93e7094..682de49 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -2294,9 +2294,12 @@ SET_SYMBOL_VAL (struct Lisp_Symbol *sym, Lisp_Object v)
eassert (sym->u.s.redirect == SYMBOL_PLAINVAL);
if (EQ (sym->u.s.val.value, Qunbound))
sym->u.s.val.value = make_binding (Qunbound);
+ EMACS_INT lexspace = CURRENT_LEXSPACE;
struct Lisp_Binding *binding = XBINDING (sym->u.s.val.value);
- binding->r[CURRENT_LEXSPACE] = false;
- binding->b[CURRENT_LEXSPACE] = v;
+ while (binding->r[lexspace])
+ lexspace = XFIXNUM (binding->b[lexspace]);
+ binding->r[lexspace] = false;
+ binding->b[lexspace] = v;
}
INLINE void
@@ -3482,7 +3485,12 @@ set_symbol_function (Lisp_Object sym, Lisp_Object
function)
/* Functions must execute in the original lexspace so lets store it. */
if (CONSP (function) && EQ (XCAR (function), Qclosure))
function = Fcons (Vcurrent_lexspace_idx, function);
- XBINDING (s->u.s._function)->b[CURRENT_LEXSPACE] = function;
+ EMACS_INT lexspace = CURRENT_LEXSPACE;
+ struct Lisp_Binding *binding = XBINDING (s->u.s._function);
+ /* Follow redirections. */
+ while (binding->r[lexspace])
+ lexspace = XFIXNUM (binding->b[lexspace]);
+ binding->b[lexspace] = function;
}
INLINE void
- scratch/lexspaces 64e442b 04/17: Add SYMBOL_FUNCTION accessor function, (continued)
- scratch/lexspaces 64e442b 04/17: Add SYMBOL_FUNCTION accessor function, Andrea Corallo, 2020/05/08
- scratch/lexspaces 02d8ef2 05/17: Move symbol value into separate binding, Andrea Corallo, 2020/05/08
- scratch/lexspaces 3a57250 06/17: Add lexspace-make-from, Andrea Corallo, 2020/05/08
- scratch/lexspaces 7fecbf5 08/17: Add lexspace redirection, Andrea Corallo, 2020/05/08
- scratch/lexspaces 09821e3 03/17: Store symbol value into the binding, Andrea Corallo, 2020/05/08
- scratch/lexspaces 04ac507 14/17: Remove unnecessary assertion, Andrea Corallo, 2020/05/08
- scratch/lexspaces 00108a5 15/17: Fix sweep_symbols, Andrea Corallo, 2020/05/08
- scratch/lexspaces 295ac3d 07/17: Make in-lexspace do something, Andrea Corallo, 2020/05/08
- scratch/lexspaces 610552d 10/17: Add SYMBOL_FUNC_LEXSPACE, Andrea Corallo, 2020/05/08
- scratch/lexspaces 9091913 13/17: Rename lexspace-make-from -> lexspace-make, Andrea Corallo, 2020/05/08
- scratch/lexspaces e2f183c 17/17: Shallow setters by default are not a good idea,
Andrea Corallo <=
- scratch/lexspaces 73363e9 09/17: Store lexspace in closures, Andrea Corallo, 2020/05/08
- scratch/lexspaces b46c504 12/17: Add lexspace-import-symbol, Andrea Corallo, 2020/05/08
- scratch/lexspaces c578c72 11/17: Add function lexspace contex mechanism, Andrea Corallo, 2020/05/08
- scratch/lexspaces 0b0098a 16/17: Rename in-lexspace -> lexspace-in, Andrea Corallo, 2020/05/08