mirror of
				https://github.com/janet-lang/janet
				synced 2025-10-29 06:37:41 +00:00 
			
		
		
		
	Compare commits
	
		
			11 Commits
		
	
	
		
			bundle-too
			...
			v1.35.1
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | dc325188d0 | ||
|   | f95de25b15 | ||
|   | f424f2936b | ||
|   | 2d6c2ee7c0 | ||
|   | 7cd106a10c | ||
|   | 0d9e999113 | ||
|   | 75710ccabd | ||
|   | 0f60115f27 | ||
|   | 16a3c85baa | ||
|   | 92ff1d3be4 | ||
|   | 58441dc49f | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -49,6 +49,7 @@ janet.wasm | ||||
| *.gen.h | ||||
| *.gen.c | ||||
| *.tmp | ||||
| temp.* | ||||
|  | ||||
| # Generate test files | ||||
| *.out | ||||
|   | ||||
| @@ -1,7 +1,12 @@ | ||||
| # Changelog | ||||
| All notable changes to this project will be documented in this file. | ||||
|  | ||||
| ## Unreleased - ??? | ||||
| ## 1.35.1 - 2024-06-16 | ||||
| - Fix some documentation typos. | ||||
| - Allow using `:only` in import without quoting. | ||||
|  | ||||
| ## 1.35.0 - 2024-06-15 | ||||
| - Add `:only` argument to `import` to allow for easier control over imported bindings. | ||||
| - Add extra optional `env` argument to `eval` and `eval-string`. | ||||
| - Allow naming function literals with a keyword. This allows better stacktraces for macros without | ||||
|   accidentally adding new bindings. | ||||
|   | ||||
							
								
								
									
										4
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								Makefile
									
									
									
									
									
								
							| @@ -204,9 +204,9 @@ build/%.bin.o: src/%.c $(JANET_HEADERS) $(JANET_LOCAL_HEADERS) Makefile | ||||
| ######################## | ||||
|  | ||||
| ifeq ($(UNAME), Darwin) | ||||
| SONAME=libjanet.1.34.dylib | ||||
| SONAME=libjanet.1.35.dylib | ||||
| else | ||||
| SONAME=libjanet.so.1.34 | ||||
| SONAME=libjanet.so.1.35 | ||||
| endif | ||||
|  | ||||
| build/c/shell.c: src/mainclient/shell.c | ||||
|   | ||||
| @@ -20,7 +20,7 @@ | ||||
|  | ||||
| project('janet', 'c', | ||||
|   default_options : ['c_std=c99', 'build.c_std=c99', 'b_lundef=false', 'default_library=both'], | ||||
|   version : '1.34.0') | ||||
|   version : '1.35.1') | ||||
|  | ||||
| # Global settings | ||||
| janet_path = join_paths(get_option('prefix'), get_option('libdir'), 'janet') | ||||
|   | ||||
| @@ -2654,7 +2654,7 @@ | ||||
|  | ||||
| (defn eval | ||||
|   ``Evaluates a form in the current environment. If more control over the | ||||
|   environment is needed, use `run-context`.`` | ||||
|   environment is needed, use `run-context`. Optionally pass in an `env` table with available bindings.`` | ||||
|   [form &opt env] | ||||
|   (def res (compile form env :eval)) | ||||
|   (if (= (type res) :function) | ||||
| @@ -2694,7 +2694,7 @@ | ||||
|  | ||||
| (defn eval-string | ||||
|   ``Evaluates a string in the current environment. If more control over the | ||||
|   environment is needed, use `run-context`.`` | ||||
|   environment is needed, use `run-context`. Optionally pass in an `env` table with available bindings.`` | ||||
|   [str &opt env] | ||||
|   (var ret nil) | ||||
|   (each x (parse-all str) (set ret (eval x env))) | ||||
| @@ -2746,8 +2746,8 @@ | ||||
| (defn- check-project-relative [x] (if (string/has-prefix? "/" x) x)) | ||||
|  | ||||
| (defdyn *module-cache* "Dynamic binding for overriding `module/cache`") | ||||
| (defdyn *module-paths* "Dynamic binding for overriding `module/cache`") | ||||
| (defdyn *module-loading* "Dynamic binding for overriding `module/cache`") | ||||
| (defdyn *module-paths* "Dynamic binding for overriding `module/paths`") | ||||
| (defdyn *module-loading* "Dynamic binding for overriding `module/loading`") | ||||
| (defdyn *module-loaders* "Dynamic binding for overriding `module/loaders`") | ||||
| (defdyn *module-make-env* "Dynamic binding for creating new environments for `import`, `require`, and `dofile`. Overrides `make-env`.") | ||||
|  | ||||
| @@ -3040,9 +3040,10 @@ | ||||
|   ``Merge a module source into the `target` environment with a `prefix`, as with the `import` macro. | ||||
|   This lets users emulate the behavior of `import` with a custom module table. | ||||
|   If `export` is truthy, then merged functions are not marked as private. Returns | ||||
|   the modified target environment.`` | ||||
|   [target source &opt prefix export] | ||||
|   (loop [[k v] :pairs source :when (symbol? k) :when (not (v :private))] | ||||
|   the modified target environment. If a tuple or array `only` is passed, only merge keys in `only`.`` | ||||
|   [target source &opt prefix export only] | ||||
|   (def only-set (if only (invert only))) | ||||
|   (loop [[k v] :pairs source :when (symbol? k) :when (not (v :private)) :when (or (not only) (in only-set k))] | ||||
|     (def newv (table/setproto @{:private (not export)} v)) | ||||
|     (put target (symbol prefix k) newv)) | ||||
|   target) | ||||
| @@ -3055,13 +3056,14 @@ | ||||
|   (def kargs (table ;args)) | ||||
|   (def {:as as | ||||
|         :prefix prefix | ||||
|         :export ep} kargs) | ||||
|         :export ep | ||||
|         :only only} kargs) | ||||
|   (def newenv (require-1 path args kargs)) | ||||
|   (def prefix (or | ||||
|                 (and as (string as "/")) | ||||
|                 prefix | ||||
|                 (string (last (string/split "/" path)) "/"))) | ||||
|   (merge-module env newenv prefix ep)) | ||||
|   (merge-module env newenv prefix ep only)) | ||||
|  | ||||
| (defmacro import | ||||
|   ``Import a module. First requires the module, and then merges its | ||||
| @@ -3071,7 +3073,8 @@ | ||||
|   to re-export the imported symbols. If "`:exit true`" is given as an argument, | ||||
|   any errors encountered at the top level in the module will cause `(os/exit 1)` | ||||
|   to be called. Dynamic bindings will NOT be imported. Use :fresh to bypass the | ||||
|   module cache.`` | ||||
|   module cache. Use `:only [foo bar baz]` to only import select bindings into the | ||||
|   current environment.`` | ||||
|   [path & args] | ||||
|   (def ps (partition 2 args)) | ||||
|   (def argm (mapcat (fn [[k v]] [k (if (= k :as) (string v) v)]) ps)) | ||||
| @@ -3742,7 +3745,7 @@ | ||||
|     (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.`` | ||||
|     ``Run a body of code after acquiring write access to an rwlock. Will automatically release the lock when done.`` | ||||
|     [lock & body] | ||||
|     (acquire-release ev/acquire-wlock ev/release-wlock lock body)) | ||||
|  | ||||
| @@ -4176,7 +4179,7 @@ | ||||
|     (not (not (os/stat (bundle-dir bundle-name) :mode)))) | ||||
|  | ||||
|   (defn bundle/install | ||||
|     "Install a bundle from the local filesystem with a name `bundle-name`." | ||||
|     "Install a bundle from the local filesystem. The name of the bundle will be infered from the bundle, or passed as a parameter :name in `config`." | ||||
|     [path &keys config] | ||||
|     (def path (bundle-rpath path)) | ||||
|     (def clean (get config :clean)) | ||||
|   | ||||
| @@ -4,10 +4,10 @@ | ||||
| #define JANETCONF_H | ||||
|  | ||||
| #define JANET_VERSION_MAJOR 1 | ||||
| #define JANET_VERSION_MINOR 34 | ||||
| #define JANET_VERSION_PATCH 0 | ||||
| #define JANET_VERSION_MINOR 35 | ||||
| #define JANET_VERSION_PATCH 1 | ||||
| #define JANET_VERSION_EXTRA "" | ||||
| #define JANET_VERSION "1.34.0" | ||||
| #define JANET_VERSION "1.35.1" | ||||
|  | ||||
| /* #define JANET_BUILD "local" */ | ||||
|  | ||||
|   | ||||
| @@ -375,7 +375,7 @@ JANET_CORE_FN(cfun_buffer_push_uint16, | ||||
|         uint16_t data; | ||||
|         uint8_t bytes[2]; | ||||
|     } u; | ||||
|     u.data = (uint16_t) janet_getinteger(argv, 2); | ||||
|     u.data = janet_getuinteger16(argv, 2); | ||||
|     if (reverse) { | ||||
|         uint8_t temp = u.bytes[1]; | ||||
|         u.bytes[1] = u.bytes[0]; | ||||
| @@ -396,7 +396,7 @@ JANET_CORE_FN(cfun_buffer_push_uint32, | ||||
|         uint32_t data; | ||||
|         uint8_t bytes[4]; | ||||
|     } u; | ||||
|     u.data = (uint32_t) janet_getinteger(argv, 2); | ||||
|     u.data = janet_getuinteger(argv, 2); | ||||
|     if (reverse) | ||||
|         reverse_u32(u.bytes); | ||||
|     janet_buffer_push_u32(buffer, *(uint32_t *) u.bytes); | ||||
| @@ -414,7 +414,7 @@ JANET_CORE_FN(cfun_buffer_push_uint64, | ||||
|         uint64_t data; | ||||
|         uint8_t bytes[8]; | ||||
|     } u; | ||||
|     u.data = (uint64_t) janet_getuinteger64(argv, 2); | ||||
|     u.data = janet_getuinteger64(argv, 2); | ||||
|     if (reverse) | ||||
|         reverse_u64(u.bytes); | ||||
|     janet_buffer_push_u64(buffer, *(uint64_t *) u.bytes); | ||||
|   | ||||
| @@ -303,11 +303,28 @@ int32_t janet_getinteger(const Janet *argv, int32_t n) { | ||||
| uint32_t janet_getuinteger(const Janet *argv, int32_t n) { | ||||
|     Janet x = argv[n]; | ||||
|     if (!janet_checkuint(x)) { | ||||
|         janet_panicf("bad slot #%d, expected 32 bit signed integer, got %v", n, x); | ||||
|         janet_panicf("bad slot #%d, expected 32 bit unsigned integer, got %v", n, x); | ||||
|     } | ||||
|     return janet_unwrap_integer(x); | ||||
|     return (uint32_t) janet_unwrap_number(x); | ||||
| } | ||||
|  | ||||
| int16_t janet_getinteger16(const Janet *argv, int32_t n) { | ||||
|     Janet x = argv[n]; | ||||
|     if (!janet_checkint16(x)) { | ||||
|         janet_panicf("bad slot #%d, expected 16 bit signed integer, got %v", n, x); | ||||
|     } | ||||
|     return (int16_t) janet_unwrap_number(x); | ||||
| } | ||||
|  | ||||
| uint16_t janet_getuinteger16(const Janet *argv, int32_t n) { | ||||
|     Janet x = argv[n]; | ||||
|     if (!janet_checkuint16(x)) { | ||||
|         janet_panicf("bad slot #%d, expected 16 bit unsigned integer, got %v", n, x); | ||||
|     } | ||||
|     return (uint16_t) janet_unwrap_number(x); | ||||
| } | ||||
|  | ||||
|  | ||||
| int64_t janet_getinteger64(const Janet *argv, int32_t n) { | ||||
| #ifdef JANET_INT_TYPES | ||||
|     return janet_unwrap_s64(argv[n]); | ||||
|   | ||||
| @@ -826,6 +826,20 @@ int janet_checkuint64(Janet x) { | ||||
|     return janet_checkuint64range(dval); | ||||
| } | ||||
|  | ||||
| int janet_checkint16(Janet x) { | ||||
|     if (!janet_checktype(x, JANET_NUMBER)) | ||||
|         return 0; | ||||
|     double dval = janet_unwrap_number(x); | ||||
|     return janet_checkint16range(dval); | ||||
| } | ||||
|  | ||||
| int janet_checkuint16(Janet x) { | ||||
|     if (!janet_checktype(x, JANET_NUMBER)) | ||||
|         return 0; | ||||
|     double dval = janet_unwrap_number(x); | ||||
|     return janet_checkuint16range(dval); | ||||
| } | ||||
|  | ||||
| int janet_checksize(Janet x) { | ||||
|     if (!janet_checktype(x, JANET_NUMBER)) | ||||
|         return 0; | ||||
|   | ||||
| @@ -897,12 +897,16 @@ JANET_API Janet janet_nanbox32_from_tagp(uint32_t tag, void *pointer); | ||||
| /* End of tagged union implementation */ | ||||
| #endif | ||||
|  | ||||
| JANET_API int janet_checkint16(Janet x); | ||||
| JANET_API int janet_checkuint16(Janet x); | ||||
| JANET_API int janet_checkint(Janet x); | ||||
| JANET_API int janet_checkuint(Janet x); | ||||
| JANET_API int janet_checkint64(Janet x); | ||||
| JANET_API int janet_checkuint64(Janet x); | ||||
| JANET_API int janet_checksize(Janet x); | ||||
| JANET_API JanetAbstract janet_checkabstract(Janet x, const JanetAbstractType *at); | ||||
| #define janet_checkint16range(x) ((x) >= INT16_MIN && (x) <= INT16_MAX && (x) == (int16_t)(x)) | ||||
| #define janet_checkuint16range(x) ((x) >= 0 && (x) <= UINT16_MAX && (x) == (uint16_t)(x)) | ||||
| #define janet_checkintrange(x) ((x) >= INT32_MIN && (x) <= INT32_MAX && (x) == (int32_t)(x)) | ||||
| #define janet_checkuintrange(x) ((x) >= 0 && (x) <= UINT32_MAX && (x) == (uint32_t)(x)) | ||||
| #define janet_checkint64range(x) ((x) >= JANET_INTMIN_DOUBLE && (x) <= JANET_INTMAX_DOUBLE && (x) == (int64_t)(x)) | ||||
| @@ -2020,7 +2024,10 @@ JANET_API void *janet_getpointer(const Janet *argv, int32_t n); | ||||
|  | ||||
| JANET_API int32_t janet_getnat(const Janet *argv, int32_t n); | ||||
| JANET_API int32_t janet_getinteger(const Janet *argv, int32_t n); | ||||
| JANET_API int16_t janet_getinteger16(const Janet *argv, int32_t n); | ||||
| JANET_API int64_t janet_getinteger64(const Janet *argv, int32_t n); | ||||
| JANET_API uint32_t janet_getuinteger(const Janet *argv, int32_t n); | ||||
| JANET_API uint16_t janet_getuinteger16(const Janet *argv, int32_t n); | ||||
| JANET_API uint64_t janet_getuinteger64(const Janet *argv, int32_t n); | ||||
| JANET_API size_t janet_getsize(const Janet *argv, int32_t n); | ||||
| JANET_API JanetView janet_getindexed(const Janet *argv, int32_t n); | ||||
|   | ||||
| @@ -85,9 +85,11 @@ | ||||
| (buffer/push-uint16 buffer-uint16-le :le 0x0102) | ||||
| (assert (= "\x02\x01" (string buffer-uint16-le)) "buffer/push-uint16 little endian") | ||||
|  | ||||
| (def buffer-uint16-negative @"") | ||||
| (buffer/push-uint16 buffer-uint16-negative :be -1) | ||||
| (assert (= "\xff\xff" (string buffer-uint16-negative)) "buffer/push-uint16 negative") | ||||
| (def buffer-uint16-max @"") | ||||
| (buffer/push-uint16 buffer-uint16-max :be 0xFFFF) | ||||
| (assert (= "\xff\xff" (string buffer-uint16-max)) "buffer/push-uint16 max") | ||||
| (assert-error "too large" (buffer/push-uint16 @"" 0x1FFFF)) | ||||
| (assert-error "too small" (buffer/push-uint16 @"" -0x1)) | ||||
|  | ||||
| (def buffer-uint32-be @"") | ||||
| (buffer/push-uint32 buffer-uint32-be :be 0x01020304) | ||||
| @@ -97,9 +99,9 @@ | ||||
| (buffer/push-uint32 buffer-uint32-le :le 0x01020304) | ||||
| (assert (= "\x04\x03\x02\x01" (string buffer-uint32-le)) "buffer/push-uint32 little endian") | ||||
|  | ||||
| (def buffer-uint32-negative @"") | ||||
| (buffer/push-uint32 buffer-uint32-negative :be -1) | ||||
| (assert (= "\xff\xff\xff\xff" (string buffer-uint32-negative)) "buffer/push-uint32 negative") | ||||
| (def buffer-uint32-max @"") | ||||
| (buffer/push-uint32 buffer-uint32-max :be 0xFFFFFFFF) | ||||
| (assert (= "\xff\xff\xff\xff" (string buffer-uint32-max)) "buffer/push-uint32 max") | ||||
|  | ||||
| (def buffer-float32-be @"") | ||||
| (buffer/push-float32 buffer-float32-be :be 1.234) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user