diff options
author | Mikael Magnusson <mikachu@gmail.com> | 2016-05-08 22:07:09 +0200 |
---|---|---|
committer | Mikael Magnusson <mikachu@gmail.com> | 2016-05-08 22:10:56 +0200 |
commit | f4ab07b48c747e8dade9ee85369445de3a10d669 (patch) | |
tree | cce6a0aab62389538581fb6c25c46880cf859dea /Src/params.c | |
parent | b7c2ddf65c9175b77bb9efc4ec7de7ef472d7a65 (diff) | |
download | zsh-mikachu/badarrays.tar.gz zsh-mikachu/badarrays.tar.xz zsh-mikachu/badarrays.zip |
Add typeset -C to control whether to assert the cached length mikachu/badarrays
Diffstat (limited to 'Src/params.c')
-rw-r--r-- | Src/params.c | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/Src/params.c b/Src/params.c index 4a5db3c1d..2e4dd4ee6 100644 --- a/Src/params.c +++ b/Src/params.c @@ -28,7 +28,6 @@ */ #include <assert.h> -//#define assert(x) #include "zsh.mdh" #include "params.pro" @@ -1470,7 +1469,8 @@ getarg(char **str, int *inv, Value v, int a2, zlong *w, return !down; if (v->pm->node.flags & PM_CACHELEN) { len = arrcachelen(v->pm); - assert(len == arrlen(ta)); + if (v->pm->node.flags & PM_CHECKLEN) + assert(len == arrlen(ta)); } else len = arrlen(ta); if (beg < 0) @@ -1497,7 +1497,8 @@ getarg(char **str, int *inv, Value v, int a2, zlong *w, ta = sepsplit(d = s = getstrvalue(v), sep, 1, 1); if (v->pm->node.flags & PM_CACHELEN) { len = arrcachelen(v->pm); - assert(len == arrlen(ta)); + if (v->pm->node.flags & PM_CHECKLEN) + assert(len == arrlen(ta)); } else len = arrlen(ta); if (beg < 0) @@ -2051,7 +2052,8 @@ getstrvalue(Value v) else { if (v->pm->node.flags & PM_CACHELEN) { int len = arrcachelen(v->pm); - assert(v->pm->length == arrlen(ss)); + if (v->pm->node.flags & PM_CHECKLEN) + assert(v->pm->length == arrlen(ss)); if (v->start < 0) v->start += len; s = (v->start >= len || v->start < 0) ? @@ -2258,7 +2260,8 @@ getarrvalue(Value v) return s; if (v->pm->node.flags & PM_CACHELEN) { int len = arrcachelen(v->pm); - assert(v->pm->length == arrlen(s)); + if (v->pm->node.flags & PM_CHECKLEN) + assert(v->pm->length == arrlen(s)); if (v->start < 0) v->start += v->pm->length; if (v->end < 0) @@ -2612,9 +2615,10 @@ setarrvalue(Value v, char **val) int post_assignment_length; int i; - if (v->pm->node.flags & PM_CACHELEN) - assert(v->pm->length == arrlen(old)); - else + if (v->pm->node.flags & PM_CACHELEN) { + if (v->pm->node.flags & PM_CHECKLEN) + assert(v->pm->length == arrlen(old)); + } else pre_assignment_length = arrlen(old); q = old; @@ -2728,7 +2732,8 @@ getaparam(char *s, int *len) if (len) { if (v->pm->node.flags & PM_CACHELEN) { *len = arrcachelen(v->pm); - assert (*len == arrlen(v->pm->gsu.a->getfn(v->pm))); + if (v->pm->node.flags & PM_CHECKLEN) + assert (*len == arrlen(v->pm->gsu.a->getfn(v->pm))); } else *len = arrlen(v->pm->gsu.a->getfn(v->pm)); } @@ -3006,7 +3011,8 @@ assignaparam(char *s, char **val, int flags) v->start = //arrlen(v->pm->gsu.a->getfn(v->pm)); arrcachelen(v->pm); - assert(v->pm->length == arrlen(v->pm->gsu.a->getfn(v->pm))); + if (v->pm->node.flags & PM_CHECKLEN) + assert(v->pm->length == arrlen(v->pm->gsu.a->getfn(v->pm))); } else { v->start = arrlen(v->pm->gsu.a->getfn(v->pm)); @@ -3022,7 +3028,8 @@ assignaparam(char *s, char **val, int flags) v->end //= arrlen(v->pm->gsu.a->getfn(v->pm)) + v->end; += arrcachelen(v->pm); - assert(v->pm->length == arrlen(v->pm->gsu.a->getfn(v->pm))); + if (v->pm->node.flags & PM_CHECKLEN) + assert(v->pm->length == arrlen(v->pm->gsu.a->getfn(v->pm))); } else { v->end = arrlen(v->pm->gsu.a->getfn(v->pm)) + v->end; |