[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
scratch/lexspaces 73363e9 09/17: Store lexspace in closures
From: |
Andrea Corallo |
Subject: |
scratch/lexspaces 73363e9 09/17: Store lexspace in closures |
Date: |
Fri, 8 May 2020 16:43:08 -0400 (EDT) |
branch: scratch/lexspaces
commit 73363e96b8b59531adcfe03e57d6569e209cccfb
Author: Andrea Corallo <address@hidden>
Commit: Andrea Corallo <address@hidden>
Store lexspace in closures
---
src/lisp.h | 22 +++++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
diff --git a/src/lisp.h b/src/lisp.h
index a24e5f2..9e941cb 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -2223,7 +2223,7 @@ SYMBOL_VAL (struct Lisp_Symbol *sym)
}
INLINE Lisp_Object
-SYMBOL_FUNCTION (struct Lisp_Symbol *sym)
+symbol_function_1 (struct Lisp_Symbol *sym)
{
if (NILP (sym->u.s._function))
return Qnil;
@@ -2235,6 +2235,23 @@ SYMBOL_FUNCTION (struct Lisp_Symbol *sym)
return binding->b[lexspace];
}
+INLINE Lisp_Object
+SYMBOL_FUNCTION (struct Lisp_Symbol *sym)
+{
+ Lisp_Object tmp = symbol_function_1 (sym);
+
+ if (CONSP (tmp)
+ && CONSP (XCDR (tmp))
+ && EQ (XCAR (XCDR (tmp)), Qclosure))
+ {
+ /* Remove the lexspace number in case (n closure () ...) is
+ found. */
+ eassert (FIXNUMP (XCAR (tmp)));
+ return XCDR (tmp);
+ }
+ return tmp;
+}
+
INLINE struct Lisp_Symbol *
SYMBOL_ALIAS (struct Lisp_Symbol *sym)
{
@@ -3446,6 +3463,9 @@ set_symbol_function (Lisp_Object sym, Lisp_Object
function)
struct Lisp_Symbol *s = XSYMBOL (sym);
if (NILP (s->u.s._function))
s->u.s._function = make_binding (Qnil);
+ /* Functions must execute in the original lexspace so lets store it. */
+ if (CONSP (function) && EQ (XCAR (function), Qclosure))
+ function = Fcons (make_fixnum (curr_lexspace), function);
XBINDING (s->u.s._function)->b[curr_lexspace] = function;
}
- scratch/lexspaces 02d8ef2 05/17: Move symbol value into separate binding, (continued)
- 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, 2020/05/08
- scratch/lexspaces 73363e9 09/17: Store lexspace in closures,
Andrea Corallo <=
- 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