]> git.eshelyaron.com Git - emacs.git/commitdiff
scope.el: improve handling of gv-define-*
authorEshel Yaron <me@eshelyaron.com>
Mon, 6 Jan 2025 12:27:01 +0000 (13:27 +0100)
committerEshel Yaron <me@eshelyaron.com>
Mon, 6 Jan 2025 12:27:01 +0000 (13:27 +0100)
lisp/emacs-lisp/scope.el

index 4aea25b5520b199e509c85806a3e31aea7d18099..3ea378784ec7183b4806d8ecac2353efa4df7214 100644 (file)
@@ -482,6 +482,18 @@ Optional argument LOCAL is a local context to extend."
                         group-n submatch-n))
           (scope-rx local (cdr regexp))))))))
 
+(defun scope-gv-define-expander (local name handler)
+  (when-let* ((beg (scope-sym-pos name)) (bare (scope-sym-bare name)))
+    (funcall scope-callback 'defun beg (length (symbol-name bare)) nil))
+  (scope-1 local handler))
+
+(defun scope-gv-define-simple-setter (local name setter rest)
+  (when-let* ((beg (scope-sym-pos name)) (bare (scope-sym-bare name)))
+    (funcall scope-callback 'defun beg (length (symbol-name bare)) nil))
+  (when-let* ((beg (scope-sym-pos setter)) (bare (scope-sym-bare setter)))
+    (funcall scope-callback 'function beg (length (symbol-name bare)) nil))
+  (scope-n local rest))
+
 (defvar scope-safe-macros t
   "Specify which macros are safe to expand.
 
@@ -612,6 +624,11 @@ a (possibly empty) list of safe macros.")
             (scope-let* local (car forms) (cdr forms)))
            ((memq bare '(cl-eval-when)) ; Likewise!
             (scope-n local (cdr forms)))
+           ((memq bare '(gv-define-expander))
+            (scope-gv-define-expander local (car forms) (cadr forms)))
+           ((memq bare '(gv-define-simple-setter))
+            (scope-gv-define-simple-setter
+             local (car forms) (cadr forms) (cddr forms)))
            ((scope-safe-macro-p bare)
             (scope-1 local (let ((symbols-with-pos-enabled t))
                              ;; Ignore errors from trying to expand