From 67877f60552019226e93f56b108f7b61a60ea11b Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Wed, 9 Dec 2015 16:40:08 +0000 Subject: 37364: "test" and "[" handling of parentheses. If three arguments, need to prefer binary operators if possible. Need to look for full string for parentheses. --- Src/text.c | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) (limited to 'Src/text.c') diff --git a/Src/text.c b/Src/text.c index 9421d70ce..04acd2aac 100644 --- a/Src/text.c +++ b/Src/text.c @@ -40,9 +40,32 @@ /**/ int text_expand_tabs; +/* + * Binary operators in conditions. + * There order is tied to the order of the definitions COND_STREQ + * et seq. in zsh.h. + */ +static const char *cond_binary_ops[] = { + "=", "!=", "<", ">", "-nt", "-ot", "-ef", "-eq", + "-ne", "-lt", "-gt", "-le", "-ge", "=~" +}; + static char *tptr, *tbuf, *tlim, *tpending; static int tsiz, tindent, tnewlins, tjob; +/**/ +int +is_cond_binary_op(const char *str) +{ + const char **op; + for (op = cond_binary_ops; *op; op++) + { + if (!strcmp(str, *op)) + return 1; + } + return 0; +} + static void dec_tindent(void) { @@ -120,7 +143,7 @@ taddchr(int c) /**/ static void -taddstr(char *s) +taddstr(const char *s) { int sl = strlen(s); char c; @@ -822,11 +845,6 @@ gettext2(Estate state) break; case WC_COND: { - static char *c1[] = { - "=", "!=", "<", ">", "-nt", "-ot", "-ef", "-eq", - "-ne", "-lt", "-gt", "-le", "-ge", "=~" - }; - int ctype; if (!s) { @@ -912,7 +930,7 @@ gettext2(Estate state) /* Binary test: `a = b' etc. */ taddstr(ecgetstr(state, EC_NODUP, NULL)); taddstr(" "); - taddstr(c1[ctype - COND_STREQ]); + taddstr(cond_binary_ops[ctype - COND_STREQ]); taddstr(" "); taddstr(ecgetstr(state, EC_NODUP, NULL)); if (ctype == COND_STREQ || -- cgit 1.4.1