summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOliver Kiddle <opk@users.sourceforge.net>2004-03-30 16:35:30 +0000
committerOliver Kiddle <opk@users.sourceforge.net>2004-03-30 16:35:30 +0000
commit3023ddf132825bb29c94fbd0860b7785887cc5c5 (patch)
tree1b16fe2675ae87dbe8baf805cb40bcdcbc7f1fb6
parent43513b428879d3c0ac0b3b101df5356a0788bb01 (diff)
downloadzsh-3023ddf132825bb29c94fbd0860b7785887cc5c5.tar.gz
zsh-3023ddf132825bb29c94fbd0860b7785887cc5c5.zip
19707: negative index into arrays should return scalar and not one element array
-rw-r--r--ChangeLog8
-rw-r--r--Src/params.c3
-rw-r--r--Test/D05array.ztst15
3 files changed, 24 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 5da29cf7a..0a234a790 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2004-03-30 Oliver Kiddle <opk@zsh.org>
+
+ * 19707: Src/params.c, Test/D05array.ztst: fix bug where a
+ nagative index into an array returned a one element array
+ instead of a scalar
+
2004-03-25 Clint Adams <clint@zsh.org>
* 19691: Completion/Unix/Type/_diff_options: Allow more than
@@ -65,7 +71,7 @@
the parameter was previously exported.
* 19655: Src/params.c: the reverse pointer from a tied array
- to a tied scalar wasn't delete if the array was unset by unsetting
+ to a tied scalar wasn't deleted if the array was unset by unsetting
the scalar (or probably vice versa).
2004-03-17 Peter Stephenson <pws@csr.com>
diff --git a/Src/params.c b/Src/params.c
index 49c3a93d7..134355173 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -1272,13 +1272,14 @@ getindex(char **pptr, Value v, int dq)
} else {
end = we ? we : start;
}
+ if (start != end) com = 1;
if (start > 0)
start--;
else if (start == 0 && end == 0)
end++;
if (s == tbrack) {
s++;
- if (v->isarr && start == end-1 && !com &&
+ if (v->isarr && !com &&
(!(v->isarr & SCANPM_MATCHMANY) ||
!(v->isarr & (SCANPM_MATCHKEY | SCANPM_MATCHVAL |
SCANPM_KEYMATCH))))
diff --git a/Test/D05array.ztst b/Test/D05array.ztst
index 35976899c..5ca83ee6d 100644
--- a/Test/D05array.ztst
+++ b/Test/D05array.ztst
@@ -3,6 +3,7 @@
%prep
foo=(a b c d e f g)
+ arr=(foo bar baz)
mkdir array.tmp
touch array.tmp/{1..9}
@@ -60,6 +61,20 @@
0:A slice with a negative start and end
>.b c d e f.
+ echo .${${arr[2]}[1]}.
+ echo .${${arr[-2]}[1]}.
+ echo .${${arr[2,2]}[1]}.
+ echo .${${arr[-2,-2]}[1]}.
+ echo .${${arr[2,-2]}[1]}.
+ echo .${${arr[-2,2]}[1]}.
+0:Slices should return an array, elements a scalar
+>.b.
+>.b.
+>.bar.
+>.bar.
+>.bar.
+>.bar.
+
setopt ksh_arrays
echo .${foo[1,2]}.
unsetopt ksh_arrays