aboutsummaryrefslogtreecommitdiff
path: root/jim.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2020-12-10 20:05:15 +1000
committerSteve Bennett <steveb@workware.net.au>2020-12-11 22:00:00 +1000
commit0490da395651936d844cce2e32d4972cc2ba985a (patch)
tree3a118717b441eef30618a9db6e2bfe84e709aaf1 /jim.c
parenta2816313da54dcadcdb8eecb3875fcc7373432ea (diff)
downloadjimtcl-0490da395651936d844cce2e32d4972cc2ba985a.zip
jimtcl-0490da395651936d844cce2e32d4972cc2ba985a.tar.gz
jimtcl-0490da395651936d844cce2e32d4972cc2ba985a.tar.bz2
list, string: support any number of +/-n for index
It is especially convenient to add -1 for something like: lindex $list end-$BACK-1 or: string range $str $p $p+$len-1 Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim.c')
-rw-r--r--jim.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/jim.c b/jim.c
index 684905f..2ccd769 100644
--- a/jim.c
+++ b/jim.c
@@ -7815,16 +7815,17 @@ static int SetIndexFromAny(Jim_Interp *interp, Jim_Obj *objPtr)
str = endptr;
}
- /* Now str may include or +<num> or -<num> */
- if (*str == '+' || *str == '-') {
+ /* Now str may include any number of +<num> or -<num> */
+ while (*str == '+' || *str == '-') {
int sign = (*str == '+' ? 1 : -1);
idx += sign * jim_strtol(++str, &endptr);
- if (str == endptr || *endptr) {
+ if (endptr == str) {
goto badindex;
}
str = endptr;
}
+
/* The only thing left should be spaces */
while (isspace(UCHAR(*str))) {
str++;