Update:
I used gen-and-save-class to see what it is complaining about. It is
failing due to the following fields:
public static final clojure.lang.Var printStackTrace-void__var;
public static final clojure.lang.Var printStackTrace-PrintWriter__var;
public static final clojure.lang.Var printStackTrace-PrintStream__var;
The patch seems to be fairly trivial. I patched genclass.clj with:
Index: src/clj/clojure/genclass.clj
===================================================================
--- src/clj/clojure/genclass.clj (revision 1087)
+++ src/clj/clojure/genclass.clj (working copy)
@@ -53,9 +53,9 @@
(defn- overload-name [mname pclasses]
(if (seq pclasses)
- (apply str mname (interleave (repeat \-)
+ (apply str mname (interleave (repeat \$)
(map escape-class-name pclasses)))
- (str mname "-void")))
+ (str mname "$void")))
I am not 100% sure this doesn't haven't any other effects within the
genclass code, but I did a test and it seems to be behave properly.
/mike.
On Thu, Nov 6, 2008 at 1:12 PM, Michael Reid <[EMAIL PROTECTED]> wrote:
> Hi,
>
> I am getting the following error trying to extend java.lang.Exception
> in the latest revision of Clojure:
>
> user=>(defmacro defexception [name]
> `(try
> (gen-and-load-class (quote ~name) :extends Exception)
> (catch java.lang.LinkageError le#
> (. le# (printStackTrace)))))
>
> user=> (defexception my.Exception)
> java.lang.ClassFormatError: JVMCFRE114 field name is invalid;
> class=my/Exception, offset=0
> at java.lang.ClassLoader.defineClassImpl(Native Method)
> at java.lang.ClassLoader.defineClass(ClassLoader.java:265)
> at java.lang.ClassLoader.defineClass(ClassLoader.java:202)
> at
> clojure.lang.DynamicClassLoader.defineClass(DynamicClassLoader.java:39)
> at clojure.gen_and_load_class__2231.doInvoke(genclass.clj:461)
> at clojure.lang.RestFn.invoke(RestFn.java:443)
> at user.fn__2491.invoke(Unknown Source)
> at clojure.lang.AFn.applyToHelper(AFn.java:182)
> at clojure.lang.AFn.applyTo(AFn.java:175)
> at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:2664)
> at clojure.lang.Compiler.eval(Compiler.java:4116)
> at clojure.lang.Repl.main(Repl.java:91)
> nil
> user=>
>
> The 'defexception macro is actually from swank-clojure. I have used
> this successfully in the past, the difference here is that I am using
> the IBM 1.6.0 JRE in this case:
>
> [EMAIL PROTECTED] trunk]$ java -version
> java version "1.6.0"
> Java(TM) SE Runtime Environment (build pxi3260sr2-20080818_01(SR2))
> IBM J9 VM (build 2.4, J2RE 1.6.0 IBM J9 2.4 Linux x86-32
> jvmxi3260-20080816_22093 (JIT enabled, AOT enabled)
> J9VM - 20080816_022093_lHdSMr
> JIT - r9_20080721_1330ifx2
> GC - 20080724_AA)
> JCL - 20080808_02
>
> I'm not sure if this is Clojure's bug or IBM's. I don't have the
> luxury of testing this on any other JVMs at the moment. I presume that
> since everyone is able to use swank-clojure at the latest revision
> that this is not happening on other JVMs?
>
> /mike.
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---