[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
scratch/lexspaces b46c504 12/17: Add lexspace-import-symbol
From: |
Andrea Corallo |
Subject: |
scratch/lexspaces b46c504 12/17: Add lexspace-import-symbol |
Date: |
Fri, 8 May 2020 16:43:09 -0400 (EDT) |
branch: scratch/lexspaces
commit b46c5046e71bdd6207e421bceade2fead6c6dd1c
Author: Andrea Corallo <address@hidden>
Commit: Andrea Corallo <address@hidden>
Add lexspace-import-symbol
---
src/lexspaces.c | 30 +++++++++++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/src/lexspaces.c b/src/lexspaces.c
index 5de227b..6faf805 100644
--- a/src/lexspaces.c
+++ b/src/lexspaces.c
@@ -77,8 +77,35 @@ DEFUN ("lexspace-make-from", Flexspace_make_from,
Slexspace_make_from, 2, 2, 0,
return name;
}
+DEFUN ("lexspace-import-symbol", Flexspace_import_symbol,
+ Slexspace_import_symbol, 2, 2, 0,
+ doc: /* Import SYMBOL binding from lexspace SRC. */)
+ (Lisp_Object symbol, Lisp_Object src)
+{
+ CHECK_SYMBOL (symbol);
+ CHECK_SYMBOL (src);
+ Lisp_Object src_idx = Fgethash (src, Vlexspaces, Qnil);
+ if (NILP (src_idx))
+ error ("lexspace %s does not exists", SSDATA (SYMBOL_NAME (src)));
+
+ struct Lisp_Symbol *sym = XSYMBOL (symbol);
+ if (!EQ (sym->u.s.val.value, Qunbound))
+ {
+ struct Lisp_Binding *binding = XBINDING (sym->u.s.val.value);
+ binding->r[CURRENT_LEXSPACE] = true;
+ binding->b[CURRENT_LEXSPACE] = src_idx;
+ }
+ if (!NILP (sym->u.s._function))
+ {
+ struct Lisp_Binding *binding = XBINDING (sym->u.s._function);
+ binding->r[CURRENT_LEXSPACE] = true;
+ binding->b[CURRENT_LEXSPACE] = src_idx;
+ }
+ return symbol;
+}
+
DEFUN ("in-lexspace", Fin_lexspace, Sin_lexspace, 1, 1, 0,
- doc: /* Set NAME as current lexspace. Create it in case. */)
+ doc: /* Set NAME as current lexspace. */)
(Lisp_Object name)
{
CHECK_SYMBOL (name);
@@ -106,5 +133,6 @@ syms_of_lexspaces (void)
DEFVAR_LISP ("current-lexspace-idx", Vcurrent_lexspace_idx,
doc: /* Internal use. */);
defsubr (&Sin_lexspace);
+ defsubr (&Slexspace_import_symbol);
defsubr (&Slexspace_make_from);
}
- scratch/lexspaces 3a57250 06/17: Add lexspace-make-from, (continued)
- 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, 2020/05/08
- scratch/lexspaces b46c504 12/17: Add lexspace-import-symbol,
Andrea Corallo <=
- 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