diff options
author | Steve Bennett <steveb@workware.net.au> | 2020-12-10 20:05:15 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2020-12-11 22:00:00 +1000 |
commit | 0490da395651936d844cce2e32d4972cc2ba985a (patch) | |
tree | 3a118717b441eef30618a9db6e2bfe84e709aaf1 /jim.c | |
parent | a2816313da54dcadcdb8eecb3875fcc7373432ea (diff) | |
download | jimtcl-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.c | 7 |
1 files changed, 4 insertions, 3 deletions
@@ -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++; |