diff options
| author | 2026-02-06 00:31:08 -0600 | |
|---|---|---|
| committer | 2026-02-06 00:31:08 -0600 | |
| commit | 306ce892ea63293c9c5f3ee9fa7afcfe07a06ad3 (patch) | |
| tree | b00ffc931506e57dacb3f529a12b3c8c41f99728 | |
| parent | Remove extra output from peg test. (diff) | |
| parent | Update CHANGELOG.md (diff) | |
Merge branch 'make-modules-easier'
| -rw-r--r-- | CHANGELOG.md | 3 | ||||
| -rw-r--r-- | src/boot/boot.janet | 22 |
2 files changed, 17 insertions, 8 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 0654de7c..4007ba3d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ All notable changes to this project will be documented in this file. ## Unreleased - ??? +- Allow overriding the loader when doing imports with the `:loader` argument. +- Allow importing modules with a path extension to do what one would expect. +- Add `find-all` argument to `module/find` - Add :threads, :unmarshal, :compiler, and :asm sandbox flags. - Add support for persistent REPL history with the environment variable `JANET_HISTFILE` - Fix a number of fuzzer-found compiler bugs diff --git a/src/boot/boot.janet b/src/boot/boot.janet index d2a33e24..1923eb46 100644 --- a/src/boot/boot.janet +++ b/src/boot/boot.janet @@ -2182,10 +2182,10 @@ (def last (in t (- (length t) 1))) (def bound (in t 1)) (keep-syntax! t - (array/concat - @[(in t 0) (expand-bindings bound)] - (tuple/slice t 2 -2) - @[(recur last)]))) + (array/concat + @[(in t 0) (expand-bindings bound)] + (tuple/slice t 2 -2) + @[(recur last)]))) (defn expandall [t] (def args (map recur (tuple/slice t 1))) @@ -2924,6 +2924,7 @@ (array/insert mp sys-index [(string ":sys:/:all:" ext) loader check-is-dep]) (def curall-index (find-prefix ":cur:/:all:")) (array/insert mp curall-index [(string ":cur:/:all:" ext) loader check-relative]) + (array/insert mp 0 [":all:" loader (fn :check-ext [x] (string/has-suffix? ext x))]) mp) # Don't expose this externally yet - could break if custom module/paths is setup. @@ -2976,20 +2977,22 @@ or :image if the module is found, otherwise a tuple with nil followed by an error message. ``` - [path] + [path &opt find-all] (var ret nil) (def mp (dyn *module-paths* module/paths)) + (def all-matches (if find-all @[])) (each [p mod-kind checker] mp (when (mod-filter checker path) (if (function? p) (when-let [res (p path)] (set ret [res mod-kind]) - (break)) + (if find-all (array/push all-matches ret) (break))) (do (def fullpath (string (module/expand-path path p))) (when (fexists fullpath) (set ret [fullpath mod-kind]) - (break)))))) + (if find-all (array/push all-matches ret) (break))))))) + (if find-all (break all-matches)) (if ret ret (let [expander (fn :expander [[t _ chk]] (when (string? t) @@ -3164,7 +3167,10 @@ (defn- require-1 [path args kargs] - (def [fullpath mod-kind] (module/find path)) + (def [fullpath mod-kind] + (if-let [loader (get kargs :loader)] + [path loader] + (module/find path))) (unless fullpath (error mod-kind)) (def mc (dyn *module-cache* module/cache)) (def ml (dyn *module-loading* module/loading)) |
