I had this:

(defn- subexpressions-of-sum** [[n p] terms]
  (let-print [sum (cons '+ (map #(factor-term % n p) terms))
        prod (rest (make-product* n p))]
    (concat [sum] (subexpressions-of-product (cons sum prod)))))

in a source file with other definitions. Load-file worked. I then
changed it to this:

(defn- subexpressions-of-sum** [[n p] terms]
  (let-print [sum (cons '+ (map #(factor-term % n p) terms))
        prod (rest (make-product* n p))]
    (cons sum
      (map #(cons '* (cons sum (rest %)))
        (concat prod (subexpressions-of-product prod))))))

and got:

#<CompilerException java.lang.ClassFormatError: Unknown constant tag
32 in class file com/mycompany/myfile$eval__14598 (NO_SOURCE_FILE:0)>

when I tried to do a load-file.

That function definition was the ONLY thing I changed, but I'm at a
loss to find any kind of error in it. Delimiters balance, all of the
referenced functions exist, basically there's nothing wrong.

The full exception trace, which required evaluating (.printStackTrace
(.getCause *e)) at the repl, is:

java.lang.ClassFormatError: Unknown constant tag 32 in class file
com/mycompany/myfile$eval__14598
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:466)
        at 
clojure.lang.DynamicClassLoader.defineClass(DynamicClassLoader.java:42)
        at clojure.lang.Compiler$FnExpr.getCompiledClass(Compiler.java:3417)
        at clojure.lang.Compiler$FnExpr.eval(Compiler.java:3428)
        at clojure.lang.Compiler.eval(Compiler.java:4531)
        at clojure.core$eval__3990.invoke(core.clj:1728)
        at clojure.main$repl__5813$read_eval_print__5825.invoke(main.clj:176)
        at clojure.main$repl__5813.doInvoke(main.clj:193)
        at clojure.lang.RestFn.invoke(RestFn.java:548)
        at 
org.enclojure.repl.main$create_clojure_repl__53$repl_thread_fn__55.invoke(main.clj:96)
        at clojure.lang.AFn.run(AFn.java:37)
        at java.lang.Thread.run(Thread.java:619)

It does not point to any line of my source file.

Perhaps the rewritten version of the function provokes a compiler bug?
If there is a known bug that would cause this, let me know of the
known workaround. If there is an error in the second version of my
function, let me know. (It has intentionally different semantics from
the first version, so that's not an error in and of itself.)

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