This is the mail archive of the
kawa@sourceware.org
mailing list for the Kawa project.
how to write macroexpand
- From: Jakub Jankiewicz <jcubic at onet dot pl>
- To: kawa at sources dot redhat dot com
- Date: Wed, 11 Aug 2010 10:50:54 +0000 (UTC)
- Subject: how to write macroexpand
I want to write macroexpand macro I come up with this:
(define-macro (macroexpand expr)
`(apply ((field ,(car expr) 'expander)) ',(cdr expr)))
When I use it with my own macro
(define-macro (for params . body)
(let ((iter (gentemp)) (step (if (= (length params) 4) (cadddr params)
1)))
`(let ,iter ((,(car params) ,(cadr params)))
(if (<= ,(car params) ,(caddr params))
(begin
,@body
(,iter (+ ,(car params) ,step)))))))
|kawa:178|# (macroexpand (for (i 1 10) (display i)))
I get it right
(let GS.8 ((i 1)) (if (<= i 10) (begin (display i) (GS.8 (+ i 1)))))
but when I try to use it with macro 'if' or 'let'
#|kawa:183|# (macroexpand (if #t "true" "false"))
gnu.mapping.WrongArguments: call to 'gnu.expr.ModuleMethod' has too many
arguments (3; must be 1)
at gnu.mapping.MethodProc.matchFailAsException(MethodProc.java:96)
at gnu.kawa.functions.ApplyToArgs.checkN(ApplyToArgs.java:118)
at gnu.kawa.functions.Apply.apply(Apply.java:76)
at gnu.mapping.CallContext.runUntilDone(CallContext.java:251)
at gnu.expr.ModuleExp.evalModule2(ModuleExp.java:361)
at gnu.expr.ModuleExp.evalModule(ModuleExp.java:185)
at kawa.Shell.run(Shell.java:283)
at kawa.Shell.run(Shell.java:194)
at kawa.Shell.run(Shell.java:175)
at kawa.repl.main(repl.java:852)
And when I try to use One argument:
#|kawa:184|# (macroexpand (if (#t "true" "false")))
java.lang.NullPointerException
at kawa.lang.TemplateScope.make(TemplateScope.java:40)
at kawa.lang.TemplateScope.make(TemplateScope.java:34)
at kawa.lib.prim_syntax.lambda1(prim_syntax.scm:70)
at kawa.lib.prim_syntax.apply1(prim_syntax.scm:69)
at gnu.expr.ModuleMethod.apply1(ModuleMethod.java:189)
at gnu.expr.ModuleMethod.apply(ModuleMethod.java:160)
at gnu.mapping.CallContext.runUntilDone(CallContext.java:251)
at gnu.expr.ModuleExp.evalModule2(ModuleExp.java:361)
at gnu.expr.ModuleExp.evalModule(ModuleExp.java:185)
at kawa.Shell.run(Shell.java:283)
at kawa.Shell.run(Shell.java:194)
at kawa.Shell.run(Shell.java:175)
at kawa.repl.main(repl.java:852)
How to fix macroexpand?