mes: un-defmacro optargs. WIP
authorJan Nieuwenhuizen <janneke@gnu.org>
Sat, 6 Jan 2018 08:29:11 +0000 (09:29 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sat, 6 Jan 2018 08:29:11 +0000 (09:29 +0100)
module/mes/optargs.mes
module/mes/optargs.scm

index 94b0c39b77c399c88edd3b4afdd7f7cbfa13b257..034719d903244807f1ff262bf1c893ac57acfd45 100644 (file)
@@ -26,9 +26,6 @@
 
 (mes-use-module (mes scm))
 
-(define-macro (defmacro name args . body)
-  `(define-macro ,(cons name args) ,@body))
-
 (define-macro (set-procedure-property! proc key value)
   proc)
 
index 943e21fab6361d5dce50f527b102395d80834243..8a873fe086ef7d541f14bd61f42e0ea79d47e7dc 100644 (file)
 ;; bound to whatever may have been left of rest-arg.
 ;;
 
-(defmacro let-optional (REST-ARG BINDINGS . BODY)
+(define-macro (let-optional REST-ARG BINDINGS . BODY)
   (let-optional-template REST-ARG BINDINGS BODY 'let))
 
-(defmacro let-optional* (REST-ARG BINDINGS . BODY)
+(define-macro (let-optional* REST-ARG BINDINGS . BODY)
   (let-optional-template REST-ARG BINDINGS BODY 'let*))
 
-
-
 ;; let-keywords rest-arg allow-other-keys? (binding ...) . body
 ;; let-keywords* rest-arg allow-other-keys? (binding ...) . body
 ;;   macros used to bind keyword arguments
 ;;
 
 
-(defmacro let-keywords (REST-ARG ALLOW-OTHER-KEYS? BINDINGS . BODY)
+(define-macro (let-keywords REST-ARG ALLOW-OTHER-KEYS? BINDINGS . BODY)
   (let-keywords-template REST-ARG ALLOW-OTHER-KEYS? BINDINGS BODY 'let))
 
-(defmacro let-keywords* (REST-ARG ALLOW-OTHER-KEYS? BINDINGS . BODY)
+(define-macro (let-keywords* REST-ARG ALLOW-OTHER-KEYS? BINDINGS . BODY)
   (let-keywords-template REST-ARG ALLOW-OTHER-KEYS? BINDINGS BODY 'let*))
 
 
 ;; Lisp dialects.
 
 
-(defmacro lambda* (ARGLIST . BODY)
+(define-macro (lambda* ARGLIST . BODY)
   (parse-arglist
    ARGLIST
    (lambda (non-optional-args optionals keys aok? rest-arg)
 ;; Of course, define*[-public] also supports #:rest and #:allow-other-keys
 ;; in the same way as lambda*.
 
-(defmacro define* (ARGLIST . BODY)
+(define-macro (define* ARGLIST . BODY)
   (define*-guts 'define ARGLIST BODY))
 
-(defmacro define*-public (ARGLIST . BODY)
+(define-macro (define*-public ARGLIST . BODY)
   (define*-guts 'define-public ARGLIST BODY))
 
 ;; The guts of define* and define*-public.
 ;; semantics. Here is an example of a macro with an optional argument:
 ;;   (defmacro* transmorgify (a #:optional b)
 
-(defmacro defmacro* (NAME ARGLIST . BODY)
-  `(define-macro ,NAME #f (lambda* ,ARGLIST ,@BODY)))
+(define-macro (define-macro* NAME+ARGLIST . BODY)
+  `(define-macro ,(car NAME+ARGLIST) #f (lambda* ,(cdr NAME+ARGLIST) ,@BODY)))
 
-(defmacro defmacro*-public (NAME ARGLIST . BODY)
+(define-macro (define-macro*-public NAME+ARGLIST . BODY)
   `(begin
-     (defmacro* ,NAME ,ARGLIST ,@BODY)
-     (export-syntax ,NAME)))
+     (define-macro* ,NAME+ARGLIST ,@BODY)
+     (export-syntax ,(car NAME+ARGLIST))))
 
 ;;; Support for optional & keyword args with the interpreter.
 (define *uninitialized* (list 'uninitialized))