mirror of
				https://github.com/janet-lang/janet
				synced 2025-10-31 07:33:01 +00:00 
			
		
		
		
	Range errors for slice-likes include negatives.
				
					
				
			Makes for less confusing errors when calling something like `(slice [] 0 -10)`.
This commit is contained in:
		| @@ -2,6 +2,7 @@ | |||||||
| 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 `sh-rule` and `sh-phony` to jpm's dialect of Janet. | ||||||
| - Change C api's `janet_formatb` -> `janet_formatbv`. | - Change C api's `janet_formatb` -> `janet_formatbv`. | ||||||
| - Add C `janet_formatb` to C api. | - Add C `janet_formatb` to C api. | ||||||
| - Add `edefer` macro to core. | - Add `edefer` macro to core. | ||||||
|   | |||||||
| @@ -235,18 +235,20 @@ size_t janet_getsize(const Janet *argv, int32_t n) { | |||||||
|  |  | ||||||
| int32_t janet_gethalfrange(const Janet *argv, int32_t n, int32_t length, const char *which) { | int32_t janet_gethalfrange(const Janet *argv, int32_t n, int32_t length, const char *which) { | ||||||
|     int32_t raw = janet_getinteger(argv, n); |     int32_t raw = janet_getinteger(argv, n); | ||||||
|     if (raw < 0) raw += length + 1; |     int32_t not_raw = raw; | ||||||
|     if (raw < 0 || raw > length) |     if (not_raw < 0) not_raw += length + 1; | ||||||
|         janet_panicf("%s index %d out of range [0,%d]", which, raw, length); |     if (not_raw < 0 || not_raw > length) | ||||||
|     return raw; |         janet_panicf("%s index %d out of range [%d,%d]", which, raw, -length - 1, length); | ||||||
|  |     return not_raw; | ||||||
| } | } | ||||||
|  |  | ||||||
| int32_t janet_getargindex(const Janet *argv, int32_t n, int32_t length, const char *which) { | int32_t janet_getargindex(const Janet *argv, int32_t n, int32_t length, const char *which) { | ||||||
|     int32_t raw = janet_getinteger(argv, n); |     int32_t raw = janet_getinteger(argv, n); | ||||||
|     if (raw < 0) raw += length; |     int32_t not_raw = raw; | ||||||
|     if (raw < 0 || raw > length) |     if (not_raw < 0) not_raw += length; | ||||||
|         janet_panicf("%s index %d out of range [0,%d)", which, raw, length); |     if (not_raw < 0 || not_raw > length) | ||||||
|     return raw; |         janet_panicf("%s index %d out of range [%d,%d)", which, raw, -length, length); | ||||||
|  |     return not_raw; | ||||||
| } | } | ||||||
|  |  | ||||||
| JanetView janet_getindexed(const Janet *argv, int32_t n) { | JanetView janet_getindexed(const Janet *argv, int32_t n) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Calvin Rose
					Calvin Rose