emacs-diffs
[Top][All Lists]
Advanced

[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);
 }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]