emezeske/lein-cljsbuild

Custom tagged literals cause build failure

Open

#482 opened on Nov 27, 2017

View on GitHub
 (1 comment) (0 reactions) (0 assignees)Clojure (1,096 stars) (153 forks)batch import
BugHelp WantedSuccessful Repro

Description

In short, usage of custom tagged literals (aka "data readers") works as expected using cljs.build.api, but fails under cljsbuild.

A reproducing project is available here:

https://github.com/cemerick/failing-cljsbuild-data-readers

Using cljs.build.api:

$ lein run -m build
$ node target/out-min/min.js
we made a Bar: #cemerick.foo.Bar{:a 1, :b 2}

Using cljsbuild:

$ lein cljsbuild once min
Compiling ClojureScript...
Compiling ["target/out-min/min.js"] from ["src"]...
Compiling ["target/out-min/min.js"] failed.
clojure.lang.ExceptionInfo: failed compiling file:/mnt/g/dev/clojure/failing-data-readers/src/cemerick/foo.c
ljs {:file #object[java.io.File 0x239678d "/mnt/g/dev/clojure/failing-data-readers/src/cemerick/foo.cljs"]}
        at clojure.core$ex_info.invokeStatic(core.clj:4744)
        at clojure.core$ex_info.invoke(core.clj:4744)
        at cljs.compiler$compile_file$fn__4697.invoke(compiler.cljc:1552)
        at cljs.compiler$compile_file.invokeStatic(compiler.cljc:1513)
        at cljs.compiler$compile_file.invoke(compiler.cljc:1489)
        at cljs.closure$compile_file.invokeStatic(closure.clj:540)
        at cljs.closure$compile_file.invoke(closure.clj:531)
        at cljs.closure$eval6952$fn__6953.invoke(closure.clj:609)
        at cljs.closure$eval6888$fn__6889$G__6877__6896.invoke(closure.clj:493)
        at cljs.closure$compile_sources$iter__7076__7080$fn__7081.invoke(closure.clj:954)
Caused by: java.lang.IllegalStateException: Attempting to call unbound fn: #'cemerick.foo/read-bar
        at clojure.lang.Var$Unbound.throwArity(Var.java:45)
        at clojure.lang.AFn.invoke(AFn.java:32)
        at clojure.lang.Var.invoke(Var.java:381)
        at clojure.tools.reader$read_tagged.invokeStatic(reader.clj:854)
        at clojure.tools.reader$read_tagged.invoke(reader.clj:846)
        at clojure.tools.reader$read_dispatch.invokeStatic(reader.clj:71)
        at clojure.tools.reader$read_dispatch.invoke(reader.clj:66)
        at clojure.tools.reader$read_STAR_.invokeStatic(reader.clj:924)
        ... 78 more
Subprocess failed

I don't know how or why, but the Clojure file that contains the data reader var/fn is not loaded properly, though it is loaded at some point (which you can verify by adding a top-level println expr to cemerick/foo/bar.clj). As seen above, this issue is not present when cljsbuild isn't used.

Contributor guide