about summary refs log tree commit diff
path: root/Src/subst.c
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>1999-09-06 11:05:38 +0000
committerTanaka Akira <akr@users.sourceforge.net>1999-09-06 11:05:38 +0000
commit929c56748420b581088cd75443d21d7c06ac44d6 (patch)
treebd68094f0d44922a9b125ea4211c45267506e478 /Src/subst.c
parentfb37f90888121c0fcf173539c3316e78379ff832 (diff)
downloadzsh-929c56748420b581088cd75443d21d7c06ac44d6.tar.gz
zsh-929c56748420b581088cd75443d21d7c06ac44d6.tar.xz
zsh-929c56748420b581088cd75443d21d7c06ac44d6.zip
zsh-3.1.6-pws-3 zsh-3.1.6-pws-3
Diffstat (limited to 'Src/subst.c')
-rw-r--r--Src/subst.c122
1 files changed, 19 insertions, 103 deletions
diff --git a/Src/subst.c b/Src/subst.c
index 0ced984cb..a86f1dc93 100644
--- a/Src/subst.c
+++ b/Src/subst.c
@@ -725,8 +725,6 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub)
     char *sep = NULL, *spsep = NULL;
     char *premul = NULL, *postmul = NULL, *preone = NULL, *postone = NULL;
     char *replstr = NULL;	/* replacement string for /orig/repl */
-    char *thenstr, *elsestr;    /* then and else for ${..^..^..^..} */
-    int negpat = 0;
     zlong prenum = 0, postnum = 0;
     int copied = 0;
     int arrasg = 0;
@@ -1229,8 +1227,7 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub)
 		    *s == '%' ||
 		    *s == '#' || *s == Pound ||
 		    *s == '?' || *s == Quest ||
-		    *s == '/' ||
-		    *s == '^' || *s == Hat)) {
+		    *s == '/')) {
 
 	if (!flnum)
 	    flnum++;
@@ -1285,47 +1282,7 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub)
 	    untokenize(replstr);
 	    *ptr = '\0';
 	}
-	if (s[-1] == '^' || s[-1] == Hat) {
-	    char *ptr = s;
 
-	    if (*s == s[-1]) {
-		s++;
-		negpat = 1;
-	    }
-	    for (ptr = s; *ptr && *ptr != '^' && *ptr != Hat; ptr++)
-		if (*ptr == '\\' && (ptr[1] == '^' || ptr[1] == Hat))
-		    chuck(ptr);
-	    if (!*ptr || !ptr[1]) {
-		zerr("missing `then' string", NULL, 0);
-		return NULL;
-	    }
-	    *ptr++ = '\0';
-	    thenstr = ptr;
-	    for (; *ptr && *ptr != '^' && *ptr != Hat; ptr++)
-		if (*ptr == '\\' && (ptr[1] == '^' || ptr[1] == Hat))
-		    chuck(ptr);
-	    if (*ptr) {
-		elsestr = ptr + 1;
-		if (elsestr[0] == '\\' && elsestr[1] == '.')
-		    elsestr++;
-		if (elsestr[0] == '.' && !elsestr[1])
-		    elsestr = (char *) 1;
-		else {
-		    singsub(&elsestr);
-		    untokenize(elsestr);
-		}
-		*ptr = '\0';
-	    } else
-		elsestr = NULL;
-	    if (thenstr[0] == '\\' && thenstr[1] == '.')
-		thenstr++;
-	    if (thenstr[0] == '.' && !thenstr[1])
-		thenstr = (char *) 1;
-	    else {
-		singsub(&thenstr);
-		untokenize(thenstr);
-	    }
-	}
 	if (colf)
 	    flags |= SUB_ALL;
 	/*
@@ -1439,8 +1396,6 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub)
 	case '#':
 	case Pound:
 	case '/':
-	case '^':
-	case Hat:
 	    if (qt) {
 		int one = noerrs, oef = errflag, haserr;
 
@@ -1462,66 +1417,27 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub)
 		char t = s[-1];
 
 		singsub(&s);
-		if (t == '^' || t == Hat) {
-		    if (!vunset && isarr) {
-			char **ap, **pp;
-			Patprog pprg;
-
-			if (!(pprg = patcompile(s, PAT_STATIC, NULL))) {
-			    zerr("bad pattern: %s", s, 0);
-			    return NULL;
-			}
-			if (!copied)
-			    aval = arrdup(aval), copied = 1;
-			for (ap = pp = aval; *ap; ap++) {
-			    if ((!!pattry(pprg, *ap)) ^ negpat)
-				*pp++ = dupstring(thenstr == ((char *) 1) ?
-						  *ap : thenstr);
-			    else if (elsestr)
-				*pp++ = dupstring(elsestr == ((char *) 1) ?
-						  *ap : elsestr);
-			}
-			*pp = NULL;
-		    } else {
-			Patprog pprg;
-
-			if (vunset)
-			    val = dupstring("");
-			if ((pprg = patcompile(s, PAT_STATIC, NULL)) &&
-			    ((!!pattry(pprg, val)) ^ negpat))
-			    val = dupstring(thenstr == ((char *) 1) ?
-					    val : thenstr);
-			else if (elsestr)
-			    val = dupstring(elsestr == ((char *) 1) ?
-					    val : elsestr);
-			else {
-			    vunset = 1;
-			    val = dupstring("");
-			}
-			copied = 1;
-		    }
-		} else {
-		    if (t == '/' && (flags & SUB_SUBSTR)) {
-			if (*s == '#' || *s == '%') {
-			    flags &= ~SUB_SUBSTR;
-			    if (*s == '%')
-				flags |= SUB_END;
-			    s++;
-			} else if (*s == '\\') {
-			    s++;
-			}
-		    }
-		    if (!vunset && isarr) {
-			getmatcharr(&aval, s, flags, flnum, replstr);
-			copied = 1;
-		    } else {
-			if (vunset)
-			    val = dupstring("");
-			getmatch(&val, s, flags, flnum, replstr);
-			copied = 1;
+		if (t == '/' && (flags & SUB_SUBSTR)) {
+		    if (*s == '#' || *s == '%') {
+			flags &= ~SUB_SUBSTR;
+			if (*s == '%')
+			    flags |= SUB_END;
+			s++;
+		    } else if (*s == '\\') {
+			s++;
 		    }
 		}
 	    }
+
+	    if (!vunset && isarr) {
+		getmatcharr(&aval, s, flags, flnum, replstr);
+		copied = 1;
+	    } else {
+		if (vunset)
+		    val = dupstring("");
+		getmatch(&val, s, flags, flnum, replstr);
+		copied = 1;
+	    }
 	    break;
 	}
     } else {			/* no ${...=...} or anything, but possible modifiers. */