Hello, After a recent discussion on proggit in which I complained that java interop in clojure was deficient because you couldn't create subclasses of abstract classes without resorting to java, and was subsequently alerted to the existence of the 'proxy' form, I decided to give clojure another go.
Sod's law in action: I think I may have found a compiler bug. The code I have looks like this: (if my-test (do (import '(com.X.Y.Z MyClass)) (....)) (println "blah")) Now when I execute said code with my-test equal to nil, I get: Exception in thread "main" java.lang.Exception: No such namespace: MyClass (xxx:13) at clojure.lang.Compiler.analyze(Compiler.java:3950) at clojure.lang.Compiler.analyze(Compiler.java:3908) at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:2732) at clojure.lang.Compiler.analyzeSeq(Compiler.java:4108) at clojure.lang.Compiler.analyze(Compiler.java:3935) at clojure.lang.Compiler.access$100(Compiler.java:38) at clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java: 3724) at clojure.lang.Compiler.analyzeSeq(Compiler.java:4106) at clojure.lang.Compiler.analyze(Compiler.java:3935) at clojure.lang.Compiler.analyzeSeq(Compiler.java:4094) at clojure.lang.Compiler.analyze(Compiler.java:3935) at clojure.lang.Compiler.analyze(Compiler.java:3908) at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java: 3613) at clojure.lang.Compiler.analyzeSeq(Compiler.java:4106) at clojure.lang.Compiler.analyze(Compiler.java:3935) at clojure.lang.Compiler.analyze(Compiler.java:3908) at clojure.lang.Compiler$IfExpr$Parser.parse(Compiler.java: 2383) at clojure.lang.Compiler.analyzeSeq(Compiler.java:4106) at clojure.lang.Compiler.analyze(Compiler.java:3935) at clojure.lang.Compiler.analyze(Compiler.java:3908) at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java: 3613) at clojure.lang.Compiler$FnMethod.parse(Compiler.java:3456) at clojure.lang.Compiler$FnMethod.access$1100(Compiler.java: 3335) at clojure.lang.Compiler$FnExpr.parse(Compiler.java:2921) at clojure.lang.Compiler.analyzeSeq(Compiler.java:4104) at clojure.lang.Compiler.analyze(Compiler.java:3935) at clojure.lang.Compiler.eval(Compiler.java:4140) at clojure.lang.Compiler.load(Compiler.java:4470) at clojure.lang.Compiler.loadFile(Compiler.java:4437) at clojure.lang.Script.main(Script.java:65) Caused by: java.lang.Exception: No such namespace: MyClass at clojure.lang.Compiler.resolveIn(Compiler.java:4263) at clojure.lang.Compiler.resolve(Compiler.java:4237) at clojure.lang.Compiler.analyzeSymbol(Compiler.java:4214) at clojure.lang.Compiler.analyze(Compiler.java:3923) Now, for starters, that error message seems wrong, because if I move the import to the top of the file, I get an error that looks like: Exception in thread "main" java.lang.ExceptionInInitializerError... which I *do* expect, because the static initializer of this class invokes some code which relies on an RMI object which relies on rmiregistry which is running on a different machine. But the problem is *not* that there is no such namespace, unless I'm misunderstanding something. In other words, the class certainly does exist within the com.X.Y.Z package, so the code should be correct. I think what's going on is that while the then-branch is not really evaluated, the parser walks over the AST and then something funny happens and we attempt to load MyClass without realizing that it is actually in package com.X.Y.Z. In any case, it's not a show-stopper for me, but I just wanted to alert you to the bug. Many thanks in advance, seertaak --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---