[asterisk-commits] murf: branch 1.4 r141094 - in /branches/1.4/pbx/ael: ./ ael-test/ ael-test/ae...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Sep 4 18:15:08 CDT 2008


Author: murf
Date: Thu Sep  4 18:15:07 2008
New Revision: 141094

URL: http://svn.digium.com/view/asterisk?view=rev&rev=141094
Log:
(closes issue #13357)
Reported by: pj
Tested by: murf

(closes issue #13416)
Reported by: yarns
Tested by: murf

If you find this message overly verbose, relax, it's probably
not meant for you. This message is meant for probably only
two people in the whole world: me, or the poor schnook that
has to maintain this code because I'm either dead or unavailable
at the moment.

This fix solves two reports, both having to do with embedding
a function call in a ${} construct. It was tricky because the
funccall syntax has parenthesis () in it. And up till now,
the 'word' token in the flex stuff didn't allow that, because
it would tend to steal the LP and RP tokens. To be truthful,
the "word" token was the trickiest, most unstable thing in
the whole lexer. I was lucky it made this long without complaints.
I had to choose every character in the pattern with extreme
care, and I knew that someday I'd have to revisit it. Well,
the day has come.

So, my brilliant idea (and I'm being modest), was to use the 
surrounding ${} construct to make a state machine and capture 
everything in it, no matter what it contains. But, I have to now
treat the word token like I did with comments, in that I turn
the whole thing into a state-machine sort of spec, with new
contexts "curlystate", "wordstate", and "brackstate".

Wait a minute, "brackstate"? Yes, well, it didn't take very many
regression tests to point out if I do this for ${} constructs,
I also have to do it with the $[] constructs, too.

I had to create a separate pcbstack2 and pcbstack3 because
these constructs can occur inside macro argument lists, and
when we have two state machines operating on the same structures
we'd get problems otherwise. I guess I could have stopped at
pcbstack2 and had the brackstate stuff share it, but it doesn't
hurt to be safe. So, the pcbpush and pcbpop routines also now
have versions for "2" and "3".

I had to add the {KEYWORD} construct to the initial pattern for
"word", because previously word would match stuff like "default7",
because it was a longer match than the keyword "default". But,
not any more, because the word pattern only matches only one or
two characters now, and it will always lose. So, I made it the
winner again by making an optional match on any of the keywords
before it's normal pattern.

I added another regression test to make sure we don't
lose this in future edits, and had to fix just one regression,
where it no longer reports a 'cascaded' error, which I guess
is a plus.

I've given some thought as to whether to apply these fixes to
1.4 and the 1.6.x releases, vs trunk; I decided to put it in
1.4 because one of the bug reports was against 1.4; and it
is unexpected that AEL cannot handle this situation. It actually
reduced the amount of useless "cascade" error messages that
appeared in the regressions (by one line, ehhem). There is
a possible side-effect in that it does now do more careful
checking of what's in those ${} constructs, as far as matching
parens, and brackets are concerned. Some users may find a an
insidious problem and correct it this way. This should be 
exceedingly rare, I hope.


Added:
    branches/1.4/pbx/ael/ael-test/ael-vtest25/
    branches/1.4/pbx/ael/ael-test/ael-vtest25/extensions.ael   (with props)
    branches/1.4/pbx/ael/ael-test/ref.ael-vtest25   (with props)
Modified:
    branches/1.4/pbx/ael/ael-test/ref.ael-test6
    branches/1.4/pbx/ael/ael.flex
    branches/1.4/pbx/ael/ael_lex.c

Added: branches/1.4/pbx/ael/ael-test/ael-vtest25/extensions.ael
URL: http://svn.digium.com/view/asterisk/branches/1.4/pbx/ael/ael-test/ael-vtest25/extensions.ael?view=auto&rev=141094
==============================================================================
--- branches/1.4/pbx/ael/ael-test/ael-vtest25/extensions.ael (added)
+++ branches/1.4/pbx/ael/ael-test/ael-vtest25/extensions.ael Thu Sep  4 18:15:07 2008
@@ -1,0 +1,8 @@
+context test11 {
+        841 => {
+                &test234("testing", ${CUT(EXTEN,,3)});
+                jump ${DB(uri/${uri_string})};
+                Set(line=${DB(uri/${uri_string})});
+                jump ${line};
+        }
+}

Propchange: branches/1.4/pbx/ael/ael-test/ael-vtest25/extensions.ael
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: branches/1.4/pbx/ael/ael-test/ael-vtest25/extensions.ael
------------------------------------------------------------------------------
    svn:keywords = Author Id Date Revision

Propchange: branches/1.4/pbx/ael/ael-test/ael-vtest25/extensions.ael
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: branches/1.4/pbx/ael/ael-test/ref.ael-test6
URL: http://svn.digium.com/view/asterisk/branches/1.4/pbx/ael/ael-test/ref.ael-test6?view=diff&rev=141094&r1=141093&r2=141094
==============================================================================
--- branches/1.4/pbx/ael/ael-test/ref.ael-test6 (original)
+++ branches/1.4/pbx/ael/ael-test/ref.ael-test6 Thu Sep  4 18:15:07 2008
@@ -2,16 +2,15 @@
 (If you find progress and other non-error messages irritating, you can use -q to suppress them)
 
 (You can use the -w option to dump extensions.conf format to extensions.conf.aeldump)
-LOG: lev:2 file:pbx_ael.c  line:3978 func: pbx_load_module  Starting AEL load process.
-LOG: lev:2 file:pbx_ael.c  line:3985 func: pbx_load_module  AEL load process: calculated config file name './extensions.ael'.
-LOG: lev:4 file:ael.flex  line:276 func: ael_yylex  File=./extensions.ael, line=165, column=49: Mismatched '}' in expression!
-LOG: lev:4 file:ael.y  line:755 func: ael_yyerror  ==== File: ./extensions.ael, Line 165, Cols: 51-51: Error: syntax error, unexpected '=', expecting ')'
-LOG: lev:4 file:ael.flex  line:276 func: ael_yylex  File=./extensions.ael, line=174, column=49: Mismatched '}' in expression!
-LOG: lev:4 file:ael.y  line:755 func: ael_yyerror  ==== File: ./extensions.ael, Line 174, Cols: 51-51: Error: syntax error, unexpected '=', expecting ')'
-LOG: lev:4 file:ael.flex  line:276 func: ael_yylex  File=./extensions.ael, line=222, column=41: Mismatched '}' in expression!
-LOG: lev:4 file:ael.y  line:755 func: ael_yyerror  ==== File: ./extensions.ael, Line 222, Cols: 43-43: Error: syntax error, unexpected '=', expecting ')'
-LOG: lev:4 file:ael.y  line:755 func: ael_yyerror  ==== File: ./extensions.ael, Line 291, Cols: 21-28: Error: syntax error, unexpected word, expecting '(' or ';' or '=' or ':'
-LOG: lev:4 file:ael.y  line:755 func: ael_yyerror  ==== File: ./extensions.ael, Line 291, Cols: 32-32: Error: syntax error, unexpected '|', expecting '(' or ';' or '=' or ':'
-LOG: lev:2 file:pbx_ael.c  line:3993 func: pbx_load_module  AEL load process: parsed config file name './extensions.ael'.
-LOG: lev:4 file:pbx_ael.c  line:4006 func: pbx_load_module  Sorry, but 5 syntax errors and 0 semantic errors were detected. It doesn't make sense to compile.
-LOG: lev:4 file:ael2_parse  line:523 func: main  0 contexts, 0 extensions, 0 priorities
+LOG: lev:2 file:pbx_ael.c  line:4468 func: pbx_load_module  Starting AEL load process.
+LOG: lev:2 file:pbx_ael.c  line:4475 func: pbx_load_module  AEL load process: calculated config file name './extensions.ael'.
+LOG: lev:4 file:ael.flex  line:429 func: ael_yylex  File=./extensions.ael, line=165, column=49: Mismatched '}' in expression!
+LOG: lev:4 file:ael.y  line:756 func: ael_yyerror  ==== File: ./extensions.ael, Line 165, Cols: 52-52: Error: syntax error, unexpected '=', expecting ')'
+LOG: lev:4 file:ael.flex  line:429 func: ael_yylex  File=./extensions.ael, line=174, column=49: Mismatched '}' in expression!
+LOG: lev:4 file:ael.y  line:756 func: ael_yyerror  ==== File: ./extensions.ael, Line 174, Cols: 52-52: Error: syntax error, unexpected '=', expecting ')'
+LOG: lev:4 file:ael.flex  line:429 func: ael_yylex  File=./extensions.ael, line=222, column=41: Mismatched '}' in expression!
+LOG: lev:4 file:ael.y  line:756 func: ael_yyerror  ==== File: ./extensions.ael, Line 222, Cols: 44-44: Error: syntax error, unexpected '=', expecting ')'
+LOG: lev:4 file:ael.y  line:756 func: ael_yyerror  ==== File: ./extensions.ael, Line 291, Cols: 22-33: Error: syntax error, unexpected word, expecting '(' or ';' or '=' or ':'
+LOG: lev:2 file:pbx_ael.c  line:4483 func: pbx_load_module  AEL load process: parsed config file name './extensions.ael'.
+LOG: lev:4 file:pbx_ael.c  line:4496 func: pbx_load_module  Sorry, but 4 syntax errors and 0 semantic errors were detected. It doesn't make sense to compile.
+LOG: lev:4 file:ael2_parse  line:543 func: main  0 contexts, 0 extensions, 0 priorities

Added: branches/1.4/pbx/ael/ael-test/ref.ael-vtest25
URL: http://svn.digium.com/view/asterisk/branches/1.4/pbx/ael/ael-test/ref.ael-vtest25?view=auto&rev=141094
==============================================================================
--- branches/1.4/pbx/ael/ael-test/ref.ael-vtest25 (added)
+++ branches/1.4/pbx/ael/ael-test/ref.ael-vtest25 Thu Sep  4 18:15:07 2008
@@ -1,0 +1,7 @@
+
+
+[test11]
+exten => 841,1,Macro(test234|"testing"| ${CUT(EXTEN\,\,3)})
+exten => 841,2,Goto(${DB(uri/${uri_string})}|1)
+exten => 841,3,Set(line=${DB(uri/${uri_string})})
+exten => 841,4,Goto(${line}|1)

Propchange: branches/1.4/pbx/ael/ael-test/ref.ael-vtest25
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: branches/1.4/pbx/ael/ael-test/ref.ael-vtest25
------------------------------------------------------------------------------
    svn:keywords = Author Id Date Revision

Propchange: branches/1.4/pbx/ael/ael-test/ref.ael-vtest25
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: branches/1.4/pbx/ael/ael.flex
URL: http://svn.digium.com/view/asterisk/branches/1.4/pbx/ael/ael.flex?view=diff&rev=141094&r1=141093&r2=141094
==============================================================================
--- branches/1.4/pbx/ael/ael.flex (original)
+++ branches/1.4/pbx/ael/ael.flex Thu Sep  4 18:15:07 2008
@@ -26,7 +26,7 @@
  *
  * %x describes the contexts we have: paren, semic and argg, plus INITIAL
  */
-%x paren semic argg  comment
+%x paren semic argg  comment curlystate wordstate brackstate
 
 /* prefix used for various globally-visible functions and variables.
  * This renames also yywrap, but since we do not use it, we just
@@ -83,8 +83,26 @@
 static int pbcpos = 0;
 static void pbcpush(char x);
 static int pbcpop(char x);
-
 static int parencount = 0;
+
+/*
+ * A similar stack to keep track of matching brackets ( [ { } ] ) in word tokens surrounded by ${ ... }
+ */
+static char pbcstack2[400];	/* XXX missing size checks */
+static int pbcpos2 = 0;
+static void pbcpush2(char x);
+static int pbcpop2(char x);
+static int parencount2 = 0;
+
+/*
+ * A similar stack to keep track of matching brackets ( [ { } ] ) in word tokens surrounded by $[ ... ]
+ */
+static char pbcstack3[400];	/* XXX missing size checks */
+static int pbcpos3 = 0;
+static void pbcpush3(char x);
+static int pbcpop3(char x);
+static int parencount3 = 0;
+
 
 /*
  * current line, column and filename, updated as we read the input.
@@ -175,6 +193,7 @@
 #endif
 %}
 
+KEYWORD     (context|abstract|extend|macro|globals|local|ignorepat|switch|if|ifTime|random|regexten|hint|else|goto|jump|return|break|continue|for|while|case|default|pattern|catch|switches|eswitches|includes)
 
 NOPARENS	([^()\[\]\{\}]|\\[()\[\]\{\}])*
 
@@ -230,19 +249,140 @@
 <comment>[^*\n]*\n	{ ++my_lineno; my_col=1;}
 <comment>"*"+[^*/\n]*	{ my_col += yyleng; }
 <comment>"*"+[^*/\n]*\n 	{ ++my_lineno; my_col=1;}
-<comment>"*/"		{ my_col += 2; BEGIN(INITIAL); }
+<comment>"*/"		{ my_col += 2; BEGIN(INITIAL); } /* the nice thing about comments is that you know exactly what ends them */
 
 \n		{ my_lineno++; my_col = 1; }
 [ ]+		{ my_col += yyleng; }
 [\t]+		{ my_col += (yyleng*8)-(my_col%8); }
 
-[-a-zA-Z0-9'"_/.\<\>\*\+!$#\[\]][-a-zA-Z0-9'"_/.!\*\+\<\>\{\}$#\[\]]*	{
+({KEYWORD}?[-a-zA-Z0-9'"_/.\<\>\*\+!$#\[\]]|(\\.)|(\$\{)|(\$\[)) {
+		/* boy did I open a can of worms when I changed the lexical token "word".
+		all the above keywords can be used as a beginning to a "word".-
+		before, a "word" would match a longer sequence than the above
+		keywords, and all would be well. But now "word" is a single char
+		and feeds into a statemachine sort of sequence from there on. So...
+		I added the {KEYWORD}? to the beginning of the word match sequence */
+
+		if (!strcmp(yytext,"${")) {
+			parencount2 = 0;
+			pbcpos2 = 0;
+			pbcpush2('{');  /* push '{' so the last pcbpop (parencount2 = -1) will succeed */
+			BEGIN(curlystate);
+			yymore();
+		} else if (!strcmp(yytext,"$[")) { 
+			parencount3 = 0; 
+			pbcpos3 = 0; 
+			pbcpush3('[');  /* push '[' so the last pcbpop (parencount3 = -1) will succeed */ 
+			BEGIN(brackstate); 
+			yymore(); 
+		} else { 
+			BEGIN(wordstate); 
+			yymore(); 
+		} 
+	} 
+<wordstate>[-a-zA-Z0-9'"_/.\<\>\*\+!$#\[\]] { yymore(); /* Keep going */ }
+<wordstate>(\\.)  { yymore(); /* Keep Going */ }
+<wordstate>(\$\{)  { /* the beginning of a ${} construct. prepare and pop into curlystate */
+		parencount2 = 0;
+		pbcpos2 = 0;
+		pbcpush2('{');  /* push '{' so the last pcbpop (parencount2 = -1) will succeed */
+		BEGIN(curlystate);
+		yymore();
+      }
+<wordstate>(\$\[)  { /* the beginning of a $[] construct. prepare and pop into brackstate */
+		parencount3 = 0;
+		pbcpos3 = 0;
+		pbcpush3('[');  /* push '[' so the last pcbpop (parencount3 = -1) will succeed */
+		BEGIN(brackstate);
+		yymore();
+	}
+<wordstate>([^a-zA-Z0-9\x80-\xff\x2d'"_/.\<\>\*\+!$#\[\]]) {
+		/* a non-word constituent char, like a space, tab, curly, paren, etc */
+		char c = yytext[yyleng-1];
 		STORE_POS;
 		yylval->str = strdup(yytext);
+		yylval->str[yyleng-1] = 0;
+		unput(c);  /* put this ending char back in the stream */
+		BEGIN(0);
 		prev_word = yylval->str;
 		return word;
 	}
-
+<curlystate>{NOPARENS}\}	{
+		if ( pbcpop2('}') ) {	/* error */
+			STORE_LOC;
+			ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched ')' in expression: %s !\n", my_file, my_lineno, my_col, yytext);
+			BEGIN(0);
+			yylval->str = strdup(yytext);
+			return word;
+		}
+		parencount2--;
+		if ( parencount2 >= 0) {
+			yymore();
+		} else {
+			BEGIN(wordstate); /* Finished with the current ${} construct. Return to word gathering state */
+			yymore();
+		}
+	}
+
+<curlystate>{NOPARENS}[\(\[\{]	{ 
+		char c = yytext[yyleng-1];
+		if (c == '{')
+			parencount2++;
+		pbcpush2(c);
+		yymore();
+	}
+
+<curlystate>{NOPARENS}[\]\)]	{ 
+		char c = yytext[yyleng-1];
+		if ( pbcpop2(c))  { /* error */
+			STORE_LOC;
+			ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched '%c' in expression!\n",
+				my_file, my_lineno, my_col, c);
+			BEGIN(0);
+			yylval->str = strdup(yytext);
+			return word;
+		}
+		yymore();
+	}
+
+
+<brackstate>{NOPARENS}\]	{
+		if ( pbcpop3(']') ) {	/* error */
+			STORE_LOC;
+			ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched ')' in expression: %s !\n", my_file, my_lineno, my_col, yytext);
+			BEGIN(0);
+			yylval->str = strdup(yytext);
+			return word;
+		}
+		parencount3--;
+		if ( parencount3 >= 0) {
+			yymore();
+		} else {
+			BEGIN(wordstate); /* Finished with the current ${} construct. Return to word gathering state */
+			yymore();
+		}
+	}
+
+<brackstate>{NOPARENS}[\(\[\{]	{ 
+		char c = yytext[yyleng-1];
+		if (c == '[')
+			parencount3++;
+		pbcpush3(c);
+		yymore();
+	}
+
+<brackstate>{NOPARENS}[\}\)]	{ 
+		char c = yytext[yyleng-1];
+		if ( pbcpop3(c))  { /* error */
+			STORE_LOC;
+			ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched '%c' in expression!\n",
+				my_file, my_lineno, my_col, c);
+			BEGIN(0);
+			yylval->str = strdup(yytext);
+			return word;
+		}
+		yymore();
+	}
 
 
 	/*
@@ -491,6 +631,38 @@
 	return 1; /* error */
 }
 
+static void pbcpush2(char x)
+{
+	pbcstack2[pbcpos2++] = x;
+}
+
+static int pbcpop2(char x)
+{
+	if (   ( x == ')' && pbcstack2[pbcpos2-1] == '(' )
+		|| ( x == ']' && pbcstack2[pbcpos2-1] == '[' )
+		|| ( x == '}' && pbcstack2[pbcpos2-1] == '{' )) {
+		pbcpos2--;
+		return 0;
+	}
+	return 1; /* error */
+}
+
+static void pbcpush3(char x)
+{
+	pbcstack3[pbcpos3++] = x;
+}
+
+static int pbcpop3(char x)
+{
+	if (   ( x == ')' && pbcstack3[pbcpos3-1] == '(' )
+		|| ( x == ']' && pbcstack3[pbcpos3-1] == '[' )
+		|| ( x == '}' && pbcstack3[pbcpos3-1] == '{' )) {
+		pbcpos3--;
+		return 0;
+	}
+	return 1; /* error */
+}
+
 static int c_prevword(void)
 {
 	char *c = prev_word;

Modified: branches/1.4/pbx/ael/ael_lex.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/pbx/ael/ael_lex.c?view=diff&rev=141094&r1=141093&r2=141094
==============================================================================
--- branches/1.4/pbx/ael/ael_lex.c (original)
+++ branches/1.4/pbx/ael/ael_lex.c Thu Sep  4 18:15:07 2008
@@ -32,7 +32,7 @@
 
 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
 
-#if !defined __STDC_VERSION__ || __STDC_VERSION__ >= 199901L
+#if __STDC_VERSION__ >= 199901L
 
 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
  * if you want the limit (max/min) macros for int types. 
@@ -357,8 +357,8 @@
 	*yy_cp = '\0'; \
 	yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 62
-#define YY_END_OF_BUFFER 63
+#define YY_NUM_RULES 73
+#define YY_END_OF_BUFFER 74
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -366,34 +366,39 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[239] =
+static yyconst flex_int16_t yy_accept[284] =
     {   0,
         0,    0,    0,    0,    0,    0,    0,    0,   42,   42,
-       63,   62,   49,   47,   48,   50,   50,    9,    3,    4,
-        7,   50,    8,    5,    6,   12,   50,   50,   50,   50,
+        0,    0,    0,    0,    0,    0,   74,   73,   49,   47,
+       48,   50,   50,   50,    9,    3,    4,    7,   50,    8,
+        5,    6,   12,   73,   50,   50,   50,   50,   50,   50,
        50,   50,   50,   50,   50,   50,   50,   50,   50,   50,
-       50,    1,   10,    2,   62,   52,   51,   62,   53,   62,
-       58,   59,   60,   62,   62,   54,   55,   56,   62,   57,
-       42,   43,   44,   49,   48,   50,   50,   41,   13,   11,
-       50,   50,   50,   50,   50,   50,   50,   50,   50,   50,
-       50,   50,   21,   50,   50,   50,   50,   50,   50,   50,
-       50,   50,    0,   52,   51,    0,   53,   52,   51,   53,
-
-        0,   58,   59,   60,    0,   58,   59,   60,    0,   54,
-       55,   56,    0,   57,   54,   55,   56,   57,   42,   43,
-       44,   45,   44,   46,   50,   13,   13,   50,   50,   50,
-       50,   50,   50,   50,   50,   50,   32,   50,   50,   50,
-       50,   50,   50,   50,   50,   50,   50,   50,   50,   50,
-       50,   50,   50,   50,   34,   50,   50,   50,   26,   50,
-       50,   50,   27,   25,   50,   50,   50,   28,   50,   50,
-       50,   50,   50,   50,   50,   50,   50,   30,   37,   50,
-       50,   50,   50,   50,   50,   50,   50,   50,   17,   50,
-       50,   50,   50,   50,   33,   50,   50,   50,   50,   50,
-
-       50,   16,   50,   22,   50,   50,   50,   23,   50,   29,
-       20,   50,   50,   14,   50,   35,   50,   18,   50,   50,
-       36,   50,   50,   50,   15,   31,   50,   50,   40,   24,
-       38,    0,   39,   19,    0,    0,   61,    0
+        1,   10,    2,   73,   63,   62,   73,   64,   73,   69,
+       70,   71,   73,   73,   65,   66,   67,   73,   68,   42,
+       43,   44,   73,   57,   58,   73,   56,   55,   51,   51,
+       55,   73,   60,   61,   73,   59,   49,   48,    0,   50,
+       41,   13,   11,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,   21,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   63,   62,    0,
+       64,   63,   62,   64,    0,   69,   70,   71,    0,   69,
+       70,   71,    0,   65,   66,   67,    0,   68,   65,   66,
+       67,   68,   42,   43,   44,   45,   44,   46,    0,   57,
+       58,    0,   56,   57,   58,   56,   54,   53,   52,    0,
+       60,   61,    0,   59,   60,   61,   59,    0,   13,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   32,    0,
+        0,    0,   50,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   34,    0,    0,
+
+        0,   26,    0,    0,    0,   27,   25,    0,    0,    0,
+       28,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   30,   37,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   17,    0,    0,    0,    0,    0,   33,
+        0,    0,    0,    0,    0,    0,   16,    0,   22,    0,
+        0,    0,   23,    0,   29,   20,    0,    0,   14,    0,
+       35,    0,   18,    0,    0,   36,    0,   50,    0,   15,
+       31,    0,    0,   40,   24,   38,    0,   39,   19,    0,
+        0,   72,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -401,340 +406,360 @@
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    4,    5,    6,    7,    5,    1,    8,    5,    9,
-       10,   11,    5,   12,    5,    5,   13,    5,    5,    5,
-        5,    5,    5,    5,    5,    5,    5,   14,   15,    5,
-       16,   17,    1,   18,    5,    5,    5,    5,    5,    5,
+        1,    4,    5,    6,    7,    8,    1,    9,    5,   10,
+       11,   12,    5,   13,    5,    5,   14,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    5,   15,   16,    5,
+       17,   18,    1,   19,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,   19,    5,    5,    5,    5,    5,    5,
-       20,   21,   22,    1,    5,    1,   23,   24,   25,   26,
-
-       27,   28,   29,   30,   31,   32,   33,   34,   35,   36,
-       37,   38,    5,   39,   40,   41,   42,    5,   43,   44,
-        5,    5,   45,   46,   47,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1
+        5,    5,    5,   20,    5,    5,    5,    5,    5,    5,
+       21,   22,   23,    1,    5,    1,   24,   25,   26,   27,
+
+       28,   29,   30,   31,   32,   33,   34,   35,   36,   37,
+       38,   39,    5,   40,   41,   42,   43,    5,   44,   45,
+        5,    5,   46,   47,   48,    1,    1,   49,   49,   49,
+       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
+       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
+       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
+       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
+       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
+       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
+       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
+
+       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
+       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
+       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
+       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
+       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
+       49,   49,   49,   49,   49
     } ;
 
-static yyconst flex_int32_t yy_meta[48] =
+static yyconst flex_int32_t yy_meta[50] =
     {   0,
-        1,    1,    2,    1,    3,    4,    3,    1,    1,    1,
-        5,    1,    3,    1,    1,    1,    3,    1,    3,    3,
-        1,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        1,    1,    2,    1,    3,    4,    3,    3,    1,    1,
+        1,    5,    1,    3,    1,    1,    1,    3,    1,    3,
+        3,    1,    3,    3,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-        3,    3,    3,    3,    3,    1,    3
+        3,    3,    3,    3,    3,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[252] =
+static yyconst flex_int16_t yy_base[303] =
     {   0,
-        0,    0,   39,   42,   81,  120,  159,  198,   47,   54,
-      315,  985,  312,  985,  309,    0,  281,  985,  985,  985,
-      985,   42,  985,  985,  294,  985,  286,  270,   31,  281,
-       32,  270,   33,  275,   45,  263,  281,  280,   48,  259,
-      271,  985,  985,  985,   73,  985,  985,   89,  985,  237,
-      985,  985,  985,  276,  315,  985,  985,  985,  354,  985,
-      297,  985,   66,  297,  291,    0,  258,    0,  401,  985,
-      253,  265,   64,  254,  261,  248,  244,  242,  242,  243,
-      238,  242,  258,  240,  250,  239,  248,  231,  235,   51,
-      239,  238,  103,  985,  985,  137,  985,  142,  176,  181,
-
-      439,  985,  985,  985,  478,  517,  556,  595,  634,  985,
-      985,  985,  673,  985,  712,  751,  790,  829,  265,  985,
-      103,  985,  104,  985,  242,    0,  876,  225,  242,  237,
-      238,  221,  238,  233,  225,  228,    0,  230,  216,  210,
-      219,  212,  214,  206,  203,  200,  214,  212,  196,  196,
-      202,  201,  195,  200,    0,  202,  100,  189,    0,  189,
-      193,  204,    0,    0,  190,  185,  180,    0,  180,  189,
-      178,  170,  174,  187,  184,  167,  182,    0,    0,  156,
-      163,  161,  169,  167,  158,  161,  156,  152,    0,  138,
-      141,  134,  137,  136,    0,  135,  135,  115,  113,  113,
-
-      123,    0,  109,    0,  107,  117,  107,    0,  112,    0,
-      111,  110,   92,    0,  105,    0,   95,    0,   85,   60,
-        0,   61,   48,  117,    0,    0,   45,   37,    0,    0,
-        0,  168,    0,    0,    0,   50,  985,  985,  922,  927,
-      932,  937,  940,  945,  950,  955,  960,  964,  969,  974,
-      979
+        0,    0,   40,   43,   82,  121,  160,  199,   55,   56,
+       60,   74,  247,  296,   90,  104,  432, 1023,  429, 1023,
+      426, 1023,  397,   31, 1023, 1023, 1023, 1023,   43, 1023,
+     1023,  410, 1023,    0,  401,  382,   36,  389,   34,  378,
+       38,  380,   80,  368,  372,  385,  381,   66,  357,  369,
+     1023, 1023, 1023,  138, 1023, 1023,  143, 1023,  336, 1023,
+     1023, 1023,  375,  414, 1023, 1023, 1023,  453, 1023,  396,
+     1023,  104,  177, 1023, 1023,  182, 1023, 1023, 1023,   78,
+        0,  231, 1023, 1023,  262, 1023,  393,  390,  356, 1023,
+     1023,    0, 1023,  348,  360,   92,  350,  354,  337,  333,
+
+      333,  333,  334,  329,  333,  344,  326,  335,  320,  327,
+      322,  299,  303,   93,  302,  301,  280, 1023, 1023,  314,
+     1023,  328,  344,  358,  492, 1023, 1023, 1023,  531,  570,
+      609,  648,  687, 1023, 1023, 1023,  726, 1023,  765,  804,
+      843,  882,  329, 1023,  143, 1023,  144, 1023,  392, 1023,
+     1023,  397, 1023,  431,  436,  470, 1023, 1023, 1023,  475,
+     1023, 1023,  484, 1023,  514,  523,  553,  305,    0,  288,
+      305,  299,  297,  280,  297,  292,  287,  289,    0,  291,
+      276,  250,  257,  250,  252,  247,  258,  241,  238,  251,
+      248,  232,  232,  236,  235,  228,  233,    0,  234,  113,
+
+      218,    0,  217,  209,  220,    0,    0,  207,  200,  196,
+        0,  203,  199,  208,  197,  189,  193,  206,  203,  186,
+      203,    0,    0,  181,  187,  184,  192,  190,  181,  187,
+      186,  186,    0,    0,  171,  171,  160,  164,  166,    0,
+      169,  169,  152,  147,  143,  149,    0,  138,    0,  139,
+      149,  138,    0,  140,    0,  135,  134,  109,    0,  112,
+        0,  111,    0,  105,   80,    0,   82,   61,   76,    0,
+        0,   46,   30,    0,    0,    0,  170,    0,    0,    0,
+       50, 1023, 1023,  930,  935,  940,  945,  950,  955,  960,
+      965,  970,  975,  980,  985,  989,  994,  999, 1004, 1009,
+
+     1012, 1017
     } ;
 
-static yyconst flex_int16_t yy_def[252] =
+static yyconst flex_int16_t yy_def[303] =
     {   0,
-      238,    1,  239,  239,  240,  240,  241,  241,  242,  242,
-      238,  238,  238,  238,  238,  243,  243,  238,  238,  238,
-      238,  243,  238,  238,  238,  238,  243,  243,  243,  243,
-      243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
-      243,  238,  238,  238,  244,  238,  238,  244,  238,  245,
-      238,  238,  238,  245,  246,  238,  238,  238,  246,  238,
-      247,  238,  248,  238,  238,  243,  243,  243,  249,  238,
-      243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
-      243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
-      243,  243,  244,  238,  238,  244,  238,  244,  244,  244,
-
-      245,  238,  238,  238,  245,  245,  245,  245,  246,  238,
-      238,  238,  246,  238,  246,  246,  246,  246,  247,  238,
-      248,  238,  248,  238,  243,  250,  249,  243,  243,  243,
-      243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
-      243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
-      243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
-      243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
-      243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
-      243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
-      243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
-
-      243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
-      243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
-      243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
-      243,  238,  243,  243,  251,  251,  238,    0,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238
+      283,    1,  284,  284,  285,  285,  286,  286,  287,  287,
+      288,  288,  289,  289,  290,  290,  283,  283,  283,  283,
+      283,  283,  283,  283,  283,  283,  283,  283,  283,  283,
+      283,  283,  283,  291,  283,  283,  283,  283,  283,  283,
+      283,  283,  283,  283,  283,  283,  283,  283,  283,  283,
+      283,  283,  283,  292,  283,  283,  292,  283,  293,  283,
+      283,  283,  293,  294,  283,  283,  283,  294,  283,  295,
+      283,  296,  297,  283,  283,  297,  283,  283,  283,  283,
+      298,  299,  283,  283,  299,  283,  283,  283,  283,  283,
+      283,  300,  283,  283,  283,  283,  283,  283,  283,  283,
+
+      283,  283,  283,  283,  283,  301,  283,  283,  283,  283,
+      283,  283,  283,  283,  283,  283,  292,  283,  283,  292,
+      283,  292,  292,  292,  293,  283,  283,  283,  293,  293,
+      293,  293,  294,  283,  283,  283,  294,  283,  294,  294,
+      294,  294,  295,  283,  296,  283,  296,  283,  297,  283,
+      283,  297,  283,  297,  297,  297,  283,  283,  283,  299,
+      283,  283,  299,  283,  299,  299,  299,  283,  300,  283,
+      283,  283,  283,  283,  283,  283,  283,  283,  301,  283,
+      283,  283,  283,  283,  283,  283,  283,  283,  283,  283,
+      283,  283,  283,  283,  283,  283,  283,  301,  283,  283,
+
+      283,  301,  283,  283,  283,  301,  301,  283,  283,  283,
+      301,  283,  283,  283,  283,  283,  283,  283,  283,  283,
+      283,  301,  301,  283,  283,  283,  283,  283,  283,  283,
+      283,  283,  301,  301,  283,  283,  283,  283,  283,  301,
+      283,  283,  283,  283,  283,  283,  301,  283,  301,  283,
+      283,  283,  301,  283,  301,  301,  283,  283,  301,  283,
+      301,  283,  301,  283,  283,  301,  283,  283,  283,  301,
+      301,  283,  283,  301,  301,  301,  283,  301,  301,  302,
+      302,  283,    0,  283,  283,  283,  283,  283,  283,  283,
+      283,  283,  283,  283,  283,  283,  283,  283,  283,  283,
+
+      283,  283
     } ;
 
-static yyconst flex_int16_t yy_nxt[1033] =
+static yyconst flex_int16_t yy_nxt[1073] =
     {   0,
-       12,   13,   14,   15,   16,   16,   17,   18,   19,   20,
-       16,   21,   22,   23,   24,   25,   16,   26,   16,   16,
-       12,   16,   27,   28,   29,   30,   31,   32,   33,   34,
-       35,   36,   16,   16,   37,   16,   16,   38,   39,   40,
-       16,   16,   41,   16,   42,   43,   44,   46,   47,   62,
-       46,   47,   68,   73,   69,  237,   62,   63,   46,   48,
-       49,   46,   48,   49,   63,   76,   80,   74,  122,   81,
-       89,   77,   83,   84,   90,   78,  123,  234,  124,  148,
-       85,   94,   95,   46,  233,   49,   46,  231,   49,   51,
-       52,  149,   94,   96,   97,   53,  230,   98,   99,  229,
-
-       51,   54,   52,  130,  131,  122,  122,  228,   98,   96,
-      100,   94,   95,  238,  123,  238,  238,   94,  232,   97,
-      232,  227,   94,   96,   97,   51,  180,   52,   51,   52,
-      181,  226,  225,   98,   53,  100,  224,  223,  222,   51,
-       54,   52,  221,  220,  219,   98,   99,   94,  218,   97,
-       94,   95,  217,  216,  215,  214,   98,   96,  100,  213,
-      212,   94,   96,   97,   51,  211,   52,   56,   57,  232,
-       58,  232,  210,  235,  209,  208,  207,  206,   56,   59,
-       60,   98,  205,  100,   94,   95,   94,  204,   97,   94,
-       95,  203,  202,  201,  200,   94,   96,   97,  199,  198,
-
-       94,   96,   97,   56,  197,   60,   56,   57,  196,   58,
-      195,  194,  193,  192,  191,  190,  189,   56,   59,   60,
-       94,  188,   97,  187,  186,   94,  185,   97,  184,  183,
-      182,  179,  178,  177,  176,  175,  174,  173,  172,  171,
-      170,  169,   56,  168,   60,  102,  103,  167,  166,  165,
-      164,  104,  163,  162,  161,  160,  102,  105,  103,  159,
-      158,  157,  156,  155,  154,  153,  152,  120,  151,  150,
-      147,  146,  145,  144,  143,  142,  141,  140,  139,  138,
-      137,  102,  136,  103,  106,  107,  135,  134,  133,  132,
-      108,  129,  128,  125,   65,  106,  105,  107,   64,  120,
-
-       92,   91,   88,   87,   86,   82,   79,   75,   72,   71,
-       70,   67,   65,   64,  238,  238,  238,  238,  238,  238,
-      106,  238,  107,  110,  111,  238,  112,  238,  238,  238,
-      238,  238,  238,  238,  110,  113,  114,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  110,
-      238,  114,  115,  116,  238,  117,  238,  238,  238,  238,
-      238,  238,  238,  115,  113,  118,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  115,  238,
-
-      118,  126,  126,  238,  126,  238,  238,  238,  126,  126,
-      126,  238,  126,  238,  126,  126,  126,  238,  126,  238,
-      238,  126,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  126,  102,  103,  238,
-      238,  238,  238,  104,  238,  238,  238,  238,  102,  105,
-      103,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  102,  238,  103,  106,  107,  238,  238,
-      238,  238,  108,  238,  238,  238,  238,  106,  105,  107,
-
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  106,  238,  107,  102,  103,  238,  238,  238,
-      238,  104,  238,  238,  238,  238,  102,  105,  103,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  102,  238,  103,  102,  103,  238,  238,  238,  238,
-      104,  238,  238,  238,  238,  102,  105,  103,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-
-      102,  238,  103,  102,  103,  238,  238,  238,  238,  104,
-      238,  238,  238,  238,  102,  105,  103,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  102,
-      238,  103,  110,  111,  238,  112,  238,  238,  238,  238,
-      238,  238,  238,  110,  113,  114,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  110,  238,
-      114,  115,  116,  238,  117,  238,  238,  238,  238,  238,
-      238,  238,  115,  113,  118,  238,  238,  238,  238,  238,
-
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  115,  238,  118,
-      110,  111,  238,  112,  238,  238,  238,  238,  238,  238,
-      238,  110,  113,  114,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  110,  238,  114,  110,
-      111,  238,  112,  238,  238,  238,  238,  238,  238,  238,
-      110,  113,  114,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  110,  238,  114,  110,  111,
-
-      238,  112,  238,  238,  238,  238,  238,  238,  238,  110,
-      113,  114,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  110,  238,  114,  110,  111,  238,
-      112,  238,  238,  238,  238,  238,  238,  238,  110,  113,
-      114,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  110,  238,  114,  126,  126,  238,  126,
-      238,  238,  238,  126,  126,  126,  238,  126,  238,  126,
-      126,  126,  238,  126,  238,  238,  126,  238,  238,  238,
-
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  126,   45,   45,   45,   45,   45,   50,   50,   50,
-       50,   50,   55,   55,   55,   55,   55,   61,   61,   61,
-       61,   61,   66,   66,   66,   93,   93,   93,   93,   93,
-      101,  101,  101,  101,  101,  109,  109,  109,  109,  109,
-      119,  119,  119,  119,  121,  121,  121,  121,  121,  127,
-      238,  127,  127,  127,  126,  238,  126,  126,  126,  236,
-      236,  236,  238,  236,   11,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238
+       18,   19,   20,   21,   22,   22,   23,   24,   25,   26,
+       27,   22,   28,   29,   30,   31,   32,   22,   33,   22,
+       22,   34,   22,   35,   36,   37,   38,   39,   40,   41,
+       42,   43,   44,   22,   45,   46,   22,   22,   47,   48,
+       49,   22,   22,   50,   22,   51,   52,   53,   18,   55,
+       56,   90,   55,   56,   91,  282,   92,   71,   71,   96,

[... 1159 lines stripped ...]



More information about the asterisk-commits mailing list