From 605a205008168b3fff4cc5678184e68514ee206b Mon Sep 17 00:00:00 2001 From: Calvin Rose Date: Tue, 14 Apr 2020 21:27:48 -0500 Subject: [PATCH] Range errors for `slice`-likes include negatives. Makes for less confusing errors when calling something like `(slice [] 0 -10)`. --- CHANGELOG.md | 1 + src/core/capi.c | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 597a4451..5baeaa38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ All notable changes to this project will be documented in this file. ## Unreleased - ??? +- Add `sh-rule` and `sh-phony` to jpm's dialect of Janet. - Change C api's `janet_formatb` -> `janet_formatbv`. - Add C `janet_formatb` to C api. - Add `edefer` macro to core. diff --git a/src/core/capi.c b/src/core/capi.c index ce7ef70b..797642c5 100644 --- a/src/core/capi.c +++ b/src/core/capi.c @@ -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 raw = janet_getinteger(argv, n); - if (raw < 0) raw += length + 1; - if (raw < 0 || raw > length) - janet_panicf("%s index %d out of range [0,%d]", which, raw, length); - return raw; + int32_t not_raw = raw; + if (not_raw < 0) not_raw += length + 1; + if (not_raw < 0 || not_raw > length) + 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 raw = janet_getinteger(argv, n); - if (raw < 0) raw += length; - if (raw < 0 || raw > length) - janet_panicf("%s index %d out of range [0,%d)", which, raw, length); - return raw; + int32_t not_raw = raw; + if (not_raw < 0) not_raw += length; + if (not_raw < 0 || not_raw > length) + 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) {