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]

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.


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