diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2000-07-03 10:10:07 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2000-07-03 10:10:07 +0000 |
commit | a7f0716ddbcc158463d7aaedc5f866d416deb58c (patch) | |
tree | 8111e0e31f7c2bf3e4b751455f50ecde93383a02 /Src | |
parent | 43f3a585977a34d20e8ab2ac79d39183d1d02103 (diff) | |
download | zsh-a7f0716ddbcc158463d7aaedc5f866d416deb58c.tar.gz zsh-a7f0716ddbcc158463d7aaedc5f866d416deb58c.tar.xz zsh-a7f0716ddbcc158463d7aaedc5f866d416deb58c.zip |
12138: setting arrays in math context
Diffstat (limited to 'Src')
-rw-r--r-- | Src/params.c | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/Src/params.c b/Src/params.c index e7f5011d1..73b1c0e35 100644 --- a/Src/params.c +++ b/Src/params.c @@ -1898,7 +1898,7 @@ setiparam(char *s, zlong val) { struct value vbuf; Value v; - char *t = s; + char *t = s, *ss; Param pm; mnumber mnval; @@ -1908,10 +1908,18 @@ setiparam(char *s, zlong val) return NULL; } if (!(v = getvalue(&vbuf, &s, 1))) { - pm = createparam(t, PM_INTEGER); + if ((ss = strchr(s, '['))) + *ss = '\0'; + pm = createparam(t, ss ? PM_ARRAY : PM_INTEGER); DPUTS(!pm, "BUG: parameter not created"); - pm->u.val = val; - return pm; + if (ss) { + *ss = '['; + v = getvalue(&vbuf, &t, 1); + DPUTS(!v, "BUG: value not found for new parameter"); + } else { + pm->u.val = val; + return pm; + } } mnval.type = MN_INTEGER; mnval.u.l = val; @@ -1930,7 +1938,7 @@ setnparam(char *s, mnumber val) { struct value vbuf; Value v; - char *t = s; + char *t = s, *ss = NULL; Param pm; if (!isident(s)) { @@ -1939,15 +1947,23 @@ setnparam(char *s, mnumber val) return NULL; } if (!(v = getvalue(&vbuf, &s, 1))) { - pm = createparam(t, (val.type & MN_INTEGER) ? PM_INTEGER - : PM_FFLOAT); + if ((ss = strchr(s, '['))) + *ss = '\0'; + pm = createparam(t, ss ? PM_ARRAY : + (val.type & MN_INTEGER) ? PM_INTEGER : PM_FFLOAT); DPUTS(!pm, "BUG: parameter not created"); - if (val.type & MN_INTEGER) { - pm->ct = outputradix; - pm->u.val = val.u.l; - } else - pm->u.dval = val.u.d; - return pm; + if (ss) { + *ss = '['; + v = getvalue(&vbuf, &t, 1); + DPUTS(!v, "BUG: value not found for new parameter"); + } else { + if (val.type & MN_INTEGER) { + pm->ct = outputradix; + pm->u.val = val.u.l; + } else + pm->u.dval = val.u.d; + return pm; + } } setnumvalue(v, val); return v->pm; |