]> git.eshelyaron.com Git - emacs.git/commitdiff
scope.el: Handle oclosure-lambda
authorEshel Yaron <me@eshelyaron.com>
Wed, 11 Jun 2025 18:58:22 +0000 (20:58 +0200)
committerEshel Yaron <me@eshelyaron.com>
Wed, 11 Jun 2025 18:58:22 +0000 (20:58 +0200)
lisp/emacs-lisp/scope.el

index fb9f25575975d973aaf28eb5dd6a8c286f6540ab..5595f2dc48c4935a1fbfd2cc7306fe0c5afbb196 100644 (file)
@@ -1868,6 +1868,28 @@ a (possibly empty) list of safe macros.")
 (scope-define-macro-analyzer lambda (l args &rest body)
   (scope-lambda l args body))
 
+(defun scope-oclosure-lambda-1 (local0 local bindings args body)
+  (if bindings
+      (let* ((binding (ensure-list (car bindings)))
+             (sym (car binding))
+             (bare (scope-sym-bare sym))
+             (len (length (symbol-name bare)))
+             (beg (scope-sym-pos sym)))
+        (when beg (scope-report 'variable beg len beg))
+        (scope-1 local0 (cadr binding))
+        (scope-oclosure-lambda-1
+         local0 (if bare (scope-local-new bare beg local) local)
+         (cdr bindings) args body))
+    (scope-lambda local args body)))
+
+(defun scope-oclosure-lambda (local spec args body)
+  (let ((type (car-safe spec)))
+    (scope-report-s type 'oclosure))
+  (scope-oclosure-lambda-1 local local (cdr-safe spec) args body))
+
+(scope-define-macro-analyzer oclosure-lambda (l &optional spec args &rest body)
+  (scope-oclosure-lambda l spec args body))
+
 (scope-define-macro-analyzer cl-loop (l &rest clauses)
   (scope-loop l clauses))