1
0
mirror of https://github.com/janet-lang/janet synced 2024-12-24 07:20:27 +00:00

Merge branch 'master' into bundle-tools

This commit is contained in:
Calvin Rose 2024-05-19 09:53:14 -05:00
commit 751ff677fe
4 changed files with 31 additions and 1 deletions

View File

@ -4,6 +4,8 @@ All notable changes to this project will be documented in this file.
## Unreleased - ??? ## Unreleased - ???
- Add `bundle/` module for managing packages within Janet. This should replace the jpm packaging - Add `bundle/` module for managing packages within Janet. This should replace the jpm packaging
format eventually and is much simpler and amenable to more complicated builds. format eventually and is much simpler and amenable to more complicated builds.
- Add macros `ev/with-lock`, `ev/with-rlock`, and `ev/with-wlock` for using mutexes and rwlocks.
- Add `with-env`
- Add *module-make-env* dynamic binding - Add *module-make-env* dynamic binding
- Add buffer/format-at - Add buffer/format-at
- Add long form command line options for readable CLI usage - Add long form command line options for readable CLI usage

View File

@ -3748,6 +3748,30 @@
[& body] [& body]
~(,ev/thread (fn _do-thread [&] ,;body))) ~(,ev/thread (fn _do-thread [&] ,;body)))
(defn- acquire-release
[acq rel lock body]
(def l (gensym))
~(do
(def ,l ,lock)
(,acq ,l)
(defer (,rel ,l)
,;body)))
(defmacro ev/with-lock
``Run a body of code after acquiring a lock. Will automatically release the lock when done.``
[lock & body]
(acquire-release ev/acquire-lock ev/release-lock lock body))
(defmacro ev/with-rlock
``Run a body of code after acquiring read access to an rwlock. Will automatically release the lock when done.``
[lock & body]
(acquire-release ev/acquire-rlock ev/release-rlock lock body))
(defmacro ev/with-wlock
``Run a body of code after acquiring read access to an rwlock. Will automatically release the lock when done.``
[lock & body]
(acquire-release ev/acquire-wlock ev/release-wlock lock body))
(defmacro ev/spawn-thread (defmacro ev/spawn-thread
``Run some code in a new thread. Like `ev/do-thread`, but returns nil immediately.`` ``Run some code in a new thread. Like `ev/do-thread`, but returns nil immediately.``
[& body] [& body]

View File

@ -112,7 +112,8 @@ extern "C" {
|| defined(__s390x__) /* S390 64-bit (BE) */ \ || defined(__s390x__) /* S390 64-bit (BE) */ \
|| (defined(__ppc64__) || defined(__PPC64__)) \ || (defined(__ppc64__) || defined(__PPC64__)) \
|| defined(__aarch64__) /* ARM 64-bit */ \ || defined(__aarch64__) /* ARM 64-bit */ \
|| (defined(__riscv) && (__riscv_xlen == 64)) /* RISC-V 64-bit */ || (defined(__riscv) && (__riscv_xlen == 64)) /* RISC-V 64-bit */ \
|| defined(__loongarch64) /* LoongArch64 64-bit */
#define JANET_64 1 #define JANET_64 1
#else #else
#define JANET_32 1 #define JANET_32 1

View File

@ -976,4 +976,7 @@
(assert (= () '() (macex '())) "macex ()") (assert (= () '() (macex '())) "macex ()")
(assert (= '[] (macex '[])) "macex []") (assert (= '[] (macex '[])) "macex []")
(assert (= :a (with-env @{:b :a} (dyn :b))) "with-env dyn")
(assert-error "unknown symbol +" (with-env @{} (eval '(+ 1 2))))
(end-suite) (end-suite)