From 800b77bee691e234a99c1adb331c84622dbf4b04 Mon Sep 17 00:00:00 2001 From: Eshel Yaron Date: Mon, 6 Jan 2025 13:27:01 +0100 Subject: [PATCH] scope.el: improve handling of gv-define-* --- lisp/emacs-lisp/scope.el | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/lisp/emacs-lisp/scope.el b/lisp/emacs-lisp/scope.el index 4aea25b5520..3ea378784ec 100644 --- a/lisp/emacs-lisp/scope.el +++ b/lisp/emacs-lisp/scope.el @@ -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 -- 2.39.5