I was able to fork your repo and created a different 'growing expression' that nests each one inside the 'catch' clause of the enclosing try expression, which is what the macro-expansion of core.match `match` expressions do as they get longer.
It shows that the longest class file names are getting longer. I believe that at least the body of the catch clause is enclosed in a new function by the Clojure compiler, if not the main body of the try. https://github.com/jafingerhut/nestedrepro Andy On Sun, Oct 7, 2018 at 8:36 AM Laurens Van Houtven <_...@lvh.io> wrote: > FWIW: I tried to reproduce it here: https://github.com/lvh/nestedrepro > but I was unable to cause these sorts of errors using try/catch and do. > > On Sat, Oct 6, 2018 at 6:17 PM Laurens Van Houtven <_...@lvh.io> wrote: > >> I'm hitting CLJ-1852 [0] (Clojure-generated class names length exceed >> file-system limit) with a large core.match expression. I have verified that >> it is the number of clauses in core.match: compilation works as soon as I >> reduce it, and looking at `target/` it is actually producing very long >> filenames a la: >> >> >> 'iddqd$xyzzy$fn__19779$fn__19788$fn__19789$fn__19790$fn__19793$fn__19794$fn__19795$fn__19796$fn__19797$fn__19814$fn__19815$fn__19816$fn__19819$fn__19820$fn__19823$fn__19824$fn__19825$fn__19826.class' >> >> However, I don't quite understand _why_ core.match produces such long >> filenames. The error and filename suggest the problem is deeply nested >> fn*s. Judging by macroexpand-all it's just a ton of let and try/catch which >> I'd expect don't compile to fn*s internally (I'm aware of the equivalent >> between let and lambda but I expect that's not really how it's >> implemented). I am trying to understand why it's producing all of these >> nested fns as compiled classes to see if I can somehow work around this >> (without rewriting the function completely, hopefully!). >> >> I've found a similar reproducer here[1]. Unfortunately it doesn't do a >> better job explaining _why_ the compiler emits that. Any tools for helping >> me understand the compiler would be helpful. I'm already quite comfortable >> with JVM bytecode and asm. Is the best way to figure this out just to read >> Compiler.java? >> >> >> [0]: https://dev.clojure.org/jira/browse/CLJ-1852 >> [1]: https://github.com/simonpure/clojure-match-io-exception >> >> -- > 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 > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.