On Thu, Jan 29, 2009 at 12:44 PM, seertaak <mperco...@yahoo.com> wrote:
>
> 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)

Line 13?

I don't think you are showing all the code.

Perchance you are refering to MyClass elsewhere in your code and since
my-test is nil, you will be lacking an expected import?


I put the following:

(def x nil)
(if x
    (do (import '(java.io IOException))))

(println "poke")

In a file, and executed that as the argument to clojure.main, and it
did not print any stack trace. This was with revision 1232.

>        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
> >
>



-- 
Venlig hilsen / Kind regards,
Christian Vest Hansen.

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to