This is the mail archive of the
kawa@sourceware.org
mailing list for the Kawa project.
Re: compilation error when apply macro in the same module
2008/2/16, Per Bothner <per@bothner.com>:
> Probably, but you don't give me a complete test-case to try - just
> the macro definition, not the macro use.
Ok. Simple test.
$ cat macroTest.scm
(module-static #t)
(module-compile-options warn-undefined-variable: #t)
(define (getNameFromClassPath sName :: <String>) :: <String>
(let* ((sLiteralName :: <String>
(if (and (sName:startsWith "<")
(sName:endsWith ">"))
(sName:substring 1 (- (sName:length) 1))
sName))
(pPos :: <int> (sLiteralName:lastIndexOf ".")))
(if (>= pPos 0)
(sLiteralName:substring (+ 1 (sLiteralName:lastIndexOf ".")))
sLiteralName)))
(define-syntax import-class
(lambda (form)
(syntax-case form (with-array)
((_ name)
#`(define-namespace ,(string->symbol
(getNameFromClassPath
(symbol->string (syntax-object->datum #'name))))
name))
((_ name with-array)
(let* ((sName (symbol->string (syntax-object->datum #'name)))
(sArrName (sName:concat "[]"))
(sNamespace (getNameFromClassPath sName))
(sArrNamespace (sNamespace:concat "[]")))
#`(begin
(define-namespace ,(string->symbol sNamespace) name)
(define-namespace ,(string->symbol sArrNamespace)
,(string->symbol sArrName))))))))
(import-class gnu.math.IntNum)
If load this file - all ok:
$ kawa
#|kawa:1|# (load "macroTest.scm")
#|kawa:2|# IntNum
class gnu.math.IntNum
#|kawa:3|#
But when compile this test:
$ kawa -C macroTest.scm
java.lang.NullPointerException
at gnu.expr.Closure.apply(LambdaExp.java:1957)
at gnu.mapping.CallContext.runUntilDone(CallContext.java:251)
at gnu.mapping.CallContext.getFromContext(CallContext.java:280)
at gnu.expr.Expression.eval(Expression.java:24)
at gnu.expr.ApplyExp.apply(ApplyExp.java:63)
at gnu.mapping.CallContext.runUntilDone(CallContext.java:251)
at gnu.mapping.CallContext.getFromContext(CallContext.java:280)
at gnu.expr.Expression.eval(Expression.java:24)
at gnu.expr.ApplyExp.apply(ApplyExp.java:63)
at gnu.mapping.CallContext.runUntilDone(CallContext.java:251)
at gnu.mapping.CallContext.getFromContext(CallContext.java:280)
at gnu.expr.Expression.eval(Expression.java:24)
at gnu.expr.ApplyExp.apply(ApplyExp.java:63)
at gnu.expr.LetExp.apply(LetExp.java:64)
at gnu.expr.LetExp.apply(LetExp.java:64)
at gnu.expr.IfExp.apply(IfExp.java:34)
at gnu.mapping.CallContext.runUntilDone(CallContext.java:251)
at gnu.mapping.CallContext.getFromContext(CallContext.java:280)
at gnu.expr.Expression.eval(Expression.java:24)
at gnu.expr.BlockExp.apply(BlockExp.java:46)
at gnu.expr.LetExp.apply(LetExp.java:64)
at gnu.expr.Closure.apply(LambdaExp.java:1957)
at gnu.mapping.CallContext.runUntilDone(CallContext.java:251)
at gnu.mapping.CallContext.runUntilValue(CallContext.java:315)
at gnu.mapping.MethodProc.applyN(MethodProc.java:105)
at gnu.mapping.ProcedureN.apply1(ProcedureN.java:31)
at kawa.lang.Macro.expand(Macro.java:178)
at kawa.lang.Macro.scanForm(Macro.java:206)
at kawa.lang.Translator.scanForm(Translator.java:1012)
at gnu.kawa.lispexpr.LispLanguage.parse(LispLanguage.java:69)
at gnu.expr.Language.parse(Language.java:487)
at gnu.expr.Language.parse(Language.java:463)
at kawa.repl.compileFiles(repl.java:750)
at kawa.repl.processArgs(repl.java:444)
at kawa.repl.main(repl.java:853)
(compiling macroTest.scm)
macroTest.scm:33:1: evaluating syntax transformer 'import-class' threw
java.lang.NullPointerException
(your patch nothing change in this report)
When comment last line in test:
;(import-class gnu.math.IntNum)
$ kawa -C macroTest.scm
(compiling macroTest.scm to macroTest)
$ kawa
#|kawa:1|# (require <macroTest>)
#|kawa:2|# (import-class gnu.math.IntNum)
#|kawa:3|# IntNum
class gnu.math.IntNum
#|kawa:4|#
Thanks!
--
WBR, Yaroslav Kavenchuk.