Clojure

Libs are blindly added into loaded-libs even if an error occurs during loading

Details

  • Type: Defect Defect
  • Status: Open Open
  • Priority: Major Major
  • Resolution: Unresolved
  • Affects Version/s: Release 1.5, Release 1.6
  • Fix Version/s: None
  • Component/s: None
  • Labels:
    None
  • Patch:
    Code

Description

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:3: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.

Activity

Hide
Alex Miller added a comment -

This patch seems somewhat removed from the cause - is there some way to instead prevent the lib from being added to loaded-libs in the first place?

Show
Alex Miller added a comment - This patch seems somewhat removed from the cause - is there some way to instead prevent the lib from being added to loaded-libs in the first place?
Hide
OHTA Shogo added a comment -

To do so, I think we need to revert CLJ-1116.

Show
OHTA Shogo added a comment - To do so, I think we need to revert CLJ-1116.

People

Vote (0)
Watch (1)

Dates

  • Created:
    Updated: