On Sun, Jun 28, 2009 at 8:35 AM, Jarkko Oranen<chous...@gmail.com> wrote: > > On Jun 28, 8:53 am, Handkea fumosa <hfum...@gmail.com> wrote: >> (defn foo [z-r z-i c-r c-i bailout max-iters] >> (let [G__12819 (double c-r) >> G__12820 (double c-i) >> G__12817 (double -1) >> G__12818 (double 2) >> mi (int max-iters) >> b (double (* bailout bailout))] >> (loop [G__12815 (double z-r) >> G__12816 (double z-i) >> i (int 0)] >> (if (> i mi) >> :iters >> (if (> (+ (* G__12815 G__12815) (* G__12816 G__12816)) b) >> i >> (recur >> (+ (* G__12815 G__12815) (* G__12817 G__12816 G__12816) >> G__12819) >> (+ (* G__12818 G__12815 G__12816) G__12820) >> (unchecked-inc i))))))) >> >> #<CompilerException java.lang.RuntimeException: >> java.lang.IllegalArgumentException: recur arg for primitive local: >> G__12815 must be matching primitive (foo.clj:391)> >> >> The recur arg in question is (+ (* G__12815 G__12815) (* G__12817 >> G__12816 G__12816) G__12819) all of whose operands are doubles. >> >> This seems buggy. > <snip> > > This is just a hunch, but maybe it's because you have three operands > on +? it's inlined only for two operands, > and uses reduce for more. Thus, your arguments might be getting boxed. > > Try explicitly calling + (and *) with only two arguments at a time. >
Yes, that is it. Alternatives for inlining other than binary ops are under consideration. Rich --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---