diff --git a/src/content/ContentLoader.cpp b/src/content/ContentLoader.cpp index 5120f5c59..14da690a2 100644 --- a/src/content/ContentLoader.cpp +++ b/src/content/ContentLoader.cpp @@ -178,7 +178,16 @@ void ContentUnitLoader::loadUnit( ) { auto folder = pack.folder; auto configFile = folder / (defsDir + "/" + name + ".json"); - if (io::exists(configFile)) loadUnit(def, full, configFile); + if (io::exists(configFile)) { + try { + loadUnit(def, full, configFile); + } catch (const std::runtime_error& err) { + throw std::runtime_error( + "file " + util::quote(configFile.string()) + ": " + + std::string(err.what()) + ); + } + } } void ContentLoader::loadBlockMaterial( diff --git a/src/io/io.cpp b/src/io/io.cpp index 2f4eab11c..638108587 100644 --- a/src/io/io.cpp +++ b/src/io/io.cpp @@ -173,8 +173,12 @@ bool io::write_binary_json( } dv::value io::read_json(const path& filename) { - std::string text = io::read_string(filename); - return json::parse(filename.string(), text); + auto text = io::read_string(filename); + try { + return json::parse(filename.string(), text); + } catch (const parsing_error& err) { + throw err.toRuntimeError(); + } } dv::value io::read_binary_json(const path& file) { @@ -184,7 +188,12 @@ dv::value io::read_binary_json(const path& file) { } dv::value io::read_toml(const path& file) { - return toml::parse(file.string(), io::read_string(file)); + auto text = io::read_string(file); + try { + return toml::parse(file.string(), text); + } catch (const parsing_error& err) { + throw err.toRuntimeError(); + } } std::vector io::read_list(const io::path& filename) {