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 '())))
'())))