Suppose you have a lib that causes some errors during loading, like the following:
(ns broken-lib)
(} ; this line will cause a reader error
And then, if you require
the lib, it would be added into loaded-libs
in spite of the reader error,
which makes require
succeed silently after that.
user=> (contains? (loaded-libs) 'broken-lib)
false
user=> (require 'broken-lib)
CompilerException java.lang.RuntimeException: Unmatched delimiter: }, compiling:
(broken_lib.clj:4:3)
user=> (contains? (loaded-libs) 'broken-lib)
true
user=> (require 'broken-lib)
nil
user=>
Cause:
The patch for CLJ-1116 made the ns
macro blindly add the lib being defined
into loaded-libs
even if an error occurs during loading.
Approach:
modify clojure.core/load-lib
so that it removes the lib from loaded-libs
on error.