emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/geiser-guile 06d7cf5 144/284: Guile: taking advantage of t


From: Philip Kaludercic
Subject: [nongnu] elpa/geiser-guile 06d7cf5 144/284: Guile: taking advantage of the patterns property in macro transformers.
Date: Sun, 1 Aug 2021 18:29:33 -0400 (EDT)

branch: elpa/geiser-guile
commit 06d7cf553bbb2df7615724d765c0e28b508444b1
Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
Commit: Jose Antonio Ortega Ruiz <jao@gnu.org>

    Guile: taking advantage of the patterns property in macro transformers.
---
 geiser/doc.scm | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/geiser/doc.scm b/geiser/doc.scm
index e1e27c1..4bd063b 100644
--- a/geiser/doc.scm
+++ b/geiser/doc.scm
@@ -52,10 +52,13 @@
   (let ((args-list (map mkargs (if (list? args-list) args-list '()))))
     (list id (cons 'args args-list))))
 
+(define default-macro-args '(((required ...))))
+
 (define (obj-args obj)
   (cond ((not obj) #f)
         ((or (procedure? obj) (program? obj)) (arguments obj))
-        ((macro? obj) '(((required ...))))
+        ((and (macro? obj) (macro-transformer obj)) => macro-args)
+        ((macro? obj) default-macro-args)
         (else 'variable)))
 
 (define (arguments proc)
@@ -79,6 +82,16 @@
            `((required . ,(car formals)) (rest . ,(cdr formals))))
           (else #f))))
 
+(define (macro-args tf)
+  (cond ((procedure-property tf 'patterns) =>
+         (lambda (pats)
+           (filter identity
+                   (map (lambda (p)
+                          (and (every symbol? p)
+                               (list (cons 'required p))))
+                        pats))))
+        (else default-macro-args)))
+
 (define (arity->args art)
   (define (gen-arg-names count)
     (map (lambda (x) '_) (iota (max count 0))))



reply via email to

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