John Harrop <jharrop...@gmail.com> writes:

> The exception is being transformed. Eval and just about anything using
> closures -- just about any delayed evaluation, in other words -- wraps
> exceptions in RuntimeException for some reason. Even if they already were
> RuntimeExceptions (and InterruptedException isn't).

Interesting. Doesn't seem to jive with what I'm seeing though. Why
doesn't the error message mention the RuntimeException?

    user=> (try (eval '(throw (InterruptedException.)))
         (catch InterruptedException _))
    java.lang.InterruptedException (NO_SOURCE_FILE:5)

It looks like it's actually a subclass of Exception instead:

    user=> (eval '(throw (InterruptedException.)))
    java.lang.InterruptedException (NO_SOURCE_FILE:7)
    user=> (class *e)
    clojure.lang.Compiler$CompilerException
    user=> (.getSuperclass (class *e))
    java.lang.Exception
    user=> (.getCause *e)
    #<InterruptedException java.lang.InterruptedException>

I'm on 1.1-SNAPSHOT, so maybe RuntimeException was 1.0 behaviour? In
either case, it seems that the repl is hiding information from us. Or at
the very least it's abstracting it away in a very leaky fashion. 

Not a big deal with eval usage (you should be prepared for trickiness if
you use eval), but if this happens when calling closures, displaying a
different error from the one that was actually raised is hardly
straightforward.

-Phil

--~--~---------~--~----~------------~-------~--~----~
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
Note that posts from new members are moderated - please be patient with your 
first post.
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