1
0
mirror of https://github.com/janet-lang/janet synced 2024-12-25 16:00:27 +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:
Calvin Rose 2020-04-14 21:27:48 -05:00
parent 058f63b440
commit 605a205008
2 changed files with 11 additions and 8 deletions

View File

@ -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.

View File

@ -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) {