diff options
| author | mryouse | 2022-07-16 00:12:28 +0000 |
|---|---|---|
| committer | mryouse | 2022-07-16 00:12:28 +0000 |
| commit | 82b5aed115e74800fc057b96cc677653b55487b2 (patch) | |
| tree | e050c7850046e8812d992b1019ee4c276b8bbfec /neb | |
| parent | 5346ededce048d4baae16acdd5b3092d8a004890 (diff) | |
update 'use' to reference libs directory
Diffstat (limited to 'neb')
| -rw-r--r-- | neb/std/core.py | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/neb/std/core.py b/neb/std/core.py index ea80d86..cd6a112 100644 --- a/neb/std/core.py +++ b/neb/std/core.py @@ -202,17 +202,20 @@ CORE.register("while", NebSyntax("while", interpretWhile, [Arg("cond", TypeEnum. # NOTE this doesn't technically need to be a macro def interpretUse(symbol, args, env, ns): target = evaluate(args[0], env, ns) - if not isinstance(target, String): - raise InterpretPanic(symbol, "filename must be a :string", target) - target_file = Path(target.value).resolve() - if not target_file.exists(): - raise InterpretPanic(symbol, "no such file", target_file) + libs = Path("~/.local/share/neb/libs/").expanduser().glob("*.neb") + target_file_list = [p for p in libs if p.stem == target.value] + if len(target_file_list) == 1: + target_file = target_file_list[0] + else: + target_file = Path(target.value).resolve() + if not target_file.exists(): + raise InterpretPanic(symbol, "no such file or lib", target_file) with open(target_file, "r") as fil: data = fil.read() interpret(parse(lex(data)), env, ns) return List([]) -CORE.register("use", NebSyntax("use", interpretUse, [Arg("filename", TypeEnum.STRING)], return_type=Type(":list"))) +CORE.register("use", NebSyntax("use", interpretUse, [Arg("lib-or-file", TypeEnum.STRING)], return_type=Type(":list"))) # NOTE this doesn't technically need to be a macro def interpretAssert(symbol, args, env, ns): |
