mirror of
https://github.com/janet-lang/janet
synced 2024-12-27 00:40:26 +00:00
Add as-macro
and module/add-syspath
This commit is contained in:
parent
c3f770da27
commit
eeef5b0896
@ -2,6 +2,8 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
## ??? - Unreleased
|
## ??? - Unreleased
|
||||||
|
- Add `as-macro` to make using macros within quasiquote easier to do hygienically.
|
||||||
|
- Add `module/add-syspath`
|
||||||
- Expose `JANET_OUT_OF_MEMORY` as part of the Janet API.
|
- Expose `JANET_OUT_OF_MEMORY` as part of the Janet API.
|
||||||
- Add `native-deps` option to `decalre-native` in `jpm`. This lets native libraries link to other
|
- Add `native-deps` option to `decalre-native` in `jpm`. This lets native libraries link to other
|
||||||
native libraries when building with jpm.
|
native libraries when building with jpm.
|
||||||
|
@ -47,6 +47,14 @@
|
|||||||
[name & more]
|
[name & more]
|
||||||
(apply defn name :macro more))
|
(apply defn name :macro more))
|
||||||
|
|
||||||
|
(defmacro as-macro
|
||||||
|
``Use a function or macro literal `f` as a macro. This lets
|
||||||
|
any function be used as a macro. Inside a quasiquote, the
|
||||||
|
idiom `(as-macro ,my-custom-macro arg1 arg2...)` can be used
|
||||||
|
to avoid unwanted variable capture.``
|
||||||
|
[f & args]
|
||||||
|
(f ;args))
|
||||||
|
|
||||||
(defmacro defmacro-
|
(defmacro defmacro-
|
||||||
"Define a private macro that will not be exported."
|
"Define a private macro that will not be exported."
|
||||||
[name & more]
|
[name & more]
|
||||||
@ -1776,8 +1784,8 @@
|
|||||||
###
|
###
|
||||||
|
|
||||||
(defn macex1
|
(defn macex1
|
||||||
`Expand macros in a form, but do not recursively expand macros.
|
``Expand macros in a form, but do not recursively expand macros.
|
||||||
See macex docs for info on on-binding.`
|
See `macex` docs for info on on-binding.``
|
||||||
[x &opt on-binding]
|
[x &opt on-binding]
|
||||||
|
|
||||||
(when on-binding
|
(when on-binding
|
||||||
@ -2342,6 +2350,7 @@
|
|||||||
(unmarshal image load-image-dict))
|
(unmarshal image load-image-dict))
|
||||||
|
|
||||||
(defn- check-relative [x] (if (string/has-prefix? "." x) x))
|
(defn- check-relative [x] (if (string/has-prefix? "." x) x))
|
||||||
|
(defn- check-not-relative [x] (if-not (string/has-prefix? "." x) x))
|
||||||
(defn- check-is-dep [x] (unless (or (string/has-prefix? "/" x) (string/has-prefix? "." x)) x))
|
(defn- check-is-dep [x] (unless (or (string/has-prefix? "/" x) (string/has-prefix? "." x)) x))
|
||||||
(defn- check-project-relative [x] (if (string/has-prefix? "/" x) x))
|
(defn- check-project-relative [x] (if (string/has-prefix? "/" x) x))
|
||||||
|
|
||||||
@ -2384,11 +2393,30 @@
|
|||||||
(array/insert module/paths curall-index [(string ":cur:/:all:" ext) loader check-relative])
|
(array/insert module/paths curall-index [(string ":cur:/:all:" ext) loader check-relative])
|
||||||
module/paths)
|
module/paths)
|
||||||
|
|
||||||
|
(defn module/add-syspath
|
||||||
|
```
|
||||||
|
Creates duplicates module paths entries for module loader that loads from the syspath.
|
||||||
|
This lets a user add multiple alternative syspaths is a convenient way. The new paths will be insterted
|
||||||
|
directly after the last path that references :sys:.
|
||||||
|
```
|
||||||
|
[extra-path]
|
||||||
|
(def system-paths (seq [x :in module/paths
|
||||||
|
:when (string? (0 x))
|
||||||
|
:when (string/find ":sys:" (0 x))] x))
|
||||||
|
(def new-paths (seq [x :in system-paths]
|
||||||
|
(tuple (string/replace-all ":sys:" extra-path (0 x))
|
||||||
|
;(slice x 1))))
|
||||||
|
(def last-index
|
||||||
|
(- (length module/paths)
|
||||||
|
(find-index |(string/find ":sys:" ($0 0)) (reverse module/paths))))
|
||||||
|
(array/insert module/paths last-index ;new-paths)
|
||||||
|
module/paths)
|
||||||
|
|
||||||
(module/add-paths ":native:" :native)
|
(module/add-paths ":native:" :native)
|
||||||
(module/add-paths "/init.janet" :source)
|
(module/add-paths "/init.janet" :source)
|
||||||
(module/add-paths ".janet" :source)
|
(module/add-paths ".janet" :source)
|
||||||
(module/add-paths ".jimage" :image)
|
(module/add-paths ".jimage" :image)
|
||||||
(array/insert module/paths 0 [(fn is-cached [path] (if (in module/cache path) path)) :preload check-is-dep])
|
(array/insert module/paths 0 [(fn is-cached [path] (if (in module/cache path) path)) :preload check-not-relative])
|
||||||
|
|
||||||
# Version of fexists that works even with a reduced OS
|
# Version of fexists that works even with a reduced OS
|
||||||
(defn- fexists
|
(defn- fexists
|
||||||
|
Loading…
Reference in New Issue
Block a user