branch: elpa/geiser-chibi
commit 98cda369db3faf7268dd3b1705bb914dd6dad56a
Author: Artyom Bologov <[email protected]>
Commit: Artyom Bologov <[email protected]>

    Add opcode arglist inspection
---
 src/geiser/geiser.scm | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/geiser/geiser.scm b/src/geiser/geiser.scm
index 3372224620..c72824df0b 100644
--- a/src/geiser/geiser.scm
+++ b/src/geiser/geiser.scm
@@ -114,13 +114,30 @@
               '()))
         '())))
 
+(define (opcode-arglist id opcode)
+  (let loop ((params (opcode-num-params opcode))
+             (variadic? (opcode-variadic? opcode))
+             (required '()))
+    (cond
+     ((and (zero? params)
+           variadic?)
+      `(,id ("args" (("required" ,@required)
+                     ("optional" o "...")
+                     ("key")))))
+     ((zero? params)
+      `(,id ("args" (("required" ,@required)
+                     ("optional")
+                     ("key")))))
+     (else
+      (loop (- params 1) variadic? (cons '_ required))))))
+
 (define (geiser:operator-arglist id)
   (let ((cell (env-cell (interaction-environment) id)))
     (if (pair? cell)
         (let ((proc (cdr cell)))
           (cond
            ((macro? proc) '())
-           ((opcode? proc) '())
+           ((opcode? proc) (opcode-arglist id proc))
            ((procedure? proc) (procedure-arglist id proc))
            (else '())))
         '())))

Reply via email to