aboutsummaryrefslogtreecommitdiffstats
path: root/awkgram.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2015-04-30 10:04:09 +0300
committerArnold D. Robbins <arnold@skeeve.com>2015-04-30 10:04:09 +0300
commit665ec924795675c32d7178613367ec9f7a7d08e1 (patch)
tree2792c91bf7befd0a8933219a2c99ddc51ac85808 /awkgram.c
parent7e6fcced8b12b2e6f0c04c9f36841a963a660b86 (diff)
downloadegawk-665ec924795675c32d7178613367ec9f7a7d08e1.tar.gz
egawk-665ec924795675c32d7178613367ec9f7a7d08e1.tar.bz2
egawk-665ec924795675c32d7178613367ec9f7a7d08e1.zip
Fix brackets in regexps again. Let's hope this is really it.
Diffstat (limited to 'awkgram.c')
-rw-r--r--awkgram.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/awkgram.c b/awkgram.c
index 14e29d98..3f64cb26 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -5364,7 +5364,7 @@ yylex(void)
/*
* Here is what's ok with brackets:
*
- * [[] [^[] []] [^]] [.../...]
+ * [..[..] []] [^]] [.../...]
* [...\[...] [...\]...] [...\/...]
*
* (Remember that all of the above are inside /.../)
@@ -5372,7 +5372,7 @@ yylex(void)
* The code for \ handles \[, \] and \/.
*
* Otherwise, track the first open [ position, and if
- * an embedded [ or ] occurs, allow it to pass through
+ * an embedded ] occurs, allow it to pass through
* if it's right after the first [ or after [^.
*
* Whew!
@@ -5383,19 +5383,21 @@ yylex(void)
for (;;) {
c = nextc(false);
+ cur_index = tok - tokstart;
if (gawk_mb_cur_max == 1 || nextc_is_1stbyte) switch (c) {
case '[':
+ if (nextc(false) == ':' || in_brack == 0)
+ in_brack++;
+ pushback();
+ if (in_brack == 1)
+ b_index = tok - tokstart;
+ break;
case ']':
- cur_index = tok - tokstart;
if (in_brack > 0
&& (cur_index == b_index + 1
|| (cur_index == b_index + 2 && tok[-1] == '^')))
; /* do nothing */
- else if (c == '[') {
- in_brack++;
- if (in_brack == 1)
- b_index = tok - tokstart;
- } else {
+ else {
in_brack--;
if (in_brack == 0)
b_index = -1;