better error message when (load) file isn't found

This commit is contained in:
2023-03-03 05:25:41 -07:00
parent 91b56a26ec
commit 269ddb6fde
2 changed files with 13 additions and 4 deletions

View File

@@ -364,7 +364,7 @@ class Kiss {
});
}
public static function load(kissFile:String, k:KissState, ?loadingDirectory:String, loadAllExps = false):Null<ReaderExp> {
public static function load(kissFile:String, k:KissState, ?loadingDirectory:String, loadAllExps = false, ?fromExp:ReaderExp):Null<ReaderExp> {
if (loadingDirectory == null)
loadingDirectory = k.loadingDirectory;
@@ -379,7 +379,16 @@ class Kiss {
if (k.loadedFiles.exists(fullPath)) {
return k.loadedFiles[fullPath];
}
var stream = Stream.fromFile(fullPath);
var stream = try {
Stream.fromFile(fullPath);
} catch (m:Any) {
var message = 'Kiss file not found: $kissFile';
if (fromExp != null)
throw KissError.fromExp(fromExp, message);
Sys.println(message);
Sys.exit(1);
null;
}
var startPosition = stream.position();
var loadedExps = [];
Reader.readAndProcess(stream, k, (nextExp) -> {

View File

@@ -50,7 +50,7 @@ class Macros {
k.doc("load", 1, 1, '(load "<file.kiss>")');
macros["load"] = (wholeExp:ReaderExp, args:Array<ReaderExp>, k:KissState) -> {
Kiss.load(compileTimeResolveToString("The only argument to (load...)", "a .kiss file path", args[0], k), k);
Kiss.load(compileTimeResolveToString("The only argument to (load...)", "a .kiss file path", args[0], k), k, null, false, wholeExp);
};
k.doc("loadFrom", 2, 2, '(loadFrom "<haxelib name>" "<file.kiss>")');
@@ -58,7 +58,7 @@ class Macros {
var libName = compileTimeResolveToString("The first argument to (loadFrom...)", "a haxe library's name", args[0], k);
var libPath = Prelude.libPath(libName);
var otherKissFile = compileTimeResolveToString("The second argument to (loadFrom...)", "a .kiss file path", args[1], k);
Kiss.load(otherKissFile, k, libPath);
Kiss.load(otherKissFile, k, libPath, false, wholeExp);
};
function destructiveVersion(op:String, assignOp:String) {