This is the mail archive of the kawa@sourceware.org mailing list for the Kawa project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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?


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]