mirror of
				https://github.com/janet-lang/janet
				synced 2025-10-31 07:33:01 +00:00 
			
		
		
		
	Merge branch 'master' into bundle-tools
This commit is contained in:
		| @@ -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 | ||||||
|   | |||||||
| @@ -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] | ||||||
|   | |||||||
| @@ -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 | ||||||
|   | |||||||
| @@ -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) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Calvin Rose
					Calvin Rose