This is the mail archive of the
kawa@sourceware.org
mailing list for the Kawa project.
compilation error when apply macro in the same module
- From: "Yaroslav Kavenchuk" <kavenchuk at gmail dot com>
- To: kawa <kawa at sourceware dot org>
- Date: Sat, 16 Feb 2008 00:19:25 +0200
- Subject: compilation error when apply macro in the same module
I write macro for simplify define namespace:
(import-class com.sun.star.uno.UnoRuntime) =>
(define-namespace UnoRuntime import-class com.sun.star.uno.UnoRuntime)
(import-class com.sun.star.beans.PropertyValue with-array) =>
(begin
(define-namespace UnoRuntime import-class com.sun.star.uno.UnoRuntime)
(define-namespace UnoRuntime[] import-class com.sun.star.uno.UnoRuntime[]))
macro:
(define-syntax import-class
(lambda (form)
(syntax-case form (with-array)
((_ name)
#`(define-namespace ,(string->symbol
(let ((str (symbol->string (syntax-object->datum #'name))))
(str:substring (+ 1 (str:lastIndexOf "."))))) name))
((_ name with-array)
(let* ((sName (symbol->string (syntax-object->datum #'name)))
(sArrName (sName:concat "[]"))
(sNamespace (sName:substring (+ 1 (sName:lastIndexOf "."))))
(sArrNamespace (sNamespace:concat "[]")))
#`(begin
(define-namespace ,(string->symbol sNamespace) name)
(define-namespace ,(string->symbol sArrNamespace)
,(string->symbol sArrName))))))))
In repl both macro is work, but when I compile this module - I get error:
$ kawaOO -C OObridge.scm
java.lang.NullPointerException
at gnu.expr.ReferenceExp.apply(ReferenceExp.java:142)
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.kawa.functions.GetNamedExp.apply(GetNamedPart.java:363)
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.LetExp.apply(LetExp.java:52)
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.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:54)
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 OObridge.scm)
OObridge.scm:64:1: evaluating syntax transformer 'import-class' threw
java.lang.NullPointerException
Where am I wrong?
Thanks!
--
WBR, Yaroslav Kavenchuk.