about summary refs log tree commit diff
path: root/Src/text.c
diff options
context:
space:
mode:
authorPeter Stephenson <pws@zsh.org>2015-12-09 16:40:08 +0000
committerPeter Stephenson <pws@zsh.org>2015-12-09 16:40:08 +0000
commit67877f60552019226e93f56b108f7b61a60ea11b (patch)
tree49d506564c9eddecedbe4a8e056098676ad99a96 /Src/text.c
parent7f5b2f570961cd9b20f322d7f45318878a1a4b29 (diff)
downloadzsh-67877f60552019226e93f56b108f7b61a60ea11b.tar.gz
zsh-67877f60552019226e93f56b108f7b61a60ea11b.tar.xz
zsh-67877f60552019226e93f56b108f7b61a60ea11b.zip
37364: "test" and "[" handling of parentheses.
If three arguments, need to prefer binary operators if possible.

Need to look for full string for parentheses.
Diffstat (limited to 'Src/text.c')
-rw-r--r--Src/text.c32
1 files changed, 25 insertions, 7 deletions
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 ||