aboutsummaryrefslogtreecommitdiffstats
path: root/pbx
diff options
context:
space:
mode:
authormurf <murf@f38db490-d61c-443f-a65b-d21fe96a405b>2008-12-09 20:20:54 +0000
committermurf <murf@f38db490-d61c-443f-a65b-d21fe96a405b>2008-12-09 20:20:54 +0000
commita67361aeaec3162da0738cb69b90a46074b58dcc (patch)
treeda59842009962005441bc3e8e07d48cc19fdf591 /pbx
parent99a6a04e5f28de54bb8aec8ef593ccbc9a55905e (diff)
In discussion with seanbright on #asterisk-dev, I have added a default rule, and an option to suppress the default rule from being generated in the flex output, for the sake of those OS's where they didn't tweak flex's ECHO macro, and the compiler doesn't like it. The regressions are OK with this.
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@162264 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'pbx')
-rw-r--r--pbx/ael/ael.flex11
-rw-r--r--pbx/ael/ael_lex.c180
2 files changed, 107 insertions, 84 deletions
diff --git a/pbx/ael/ael.flex b/pbx/ael/ael.flex
index f1c23d17b..4e7a60228 100644
--- a/pbx/ael/ael.flex
+++ b/pbx/ael/ael.flex
@@ -35,6 +35,14 @@
%option prefix="ael_yy"
%option noyywrap
+/* I specify this option to suppress flex generating code with ECHO
+ in it. This generates compiler warnings in some systems; We've
+ seen the fwrite generate Unused variable warnings with 4.1.2 gcc.
+ Some systems have tweaked flex ECHO macro to keep the compiler
+ happy. To keep the warning message from getting output, I added
+ a default rule at the end of the patterns section */
+%option nodefault
+
/* yyfree normally just frees its arg. It can be null sometimes,
which some systems will complain about, so, we'll define our own version */
%option noyyfree
@@ -282,6 +290,7 @@ includes { STORE_POS; return KW_INCLUDES;}
yymore();
}
}
+
<wordstate>[-a-zA-Z0-9'"_/.\<\>\*\+!$#\[\]] { yymore(); /* Keep going */ }
<wordstate>(\\.) { yymore(); /* Keep Going */ }
<wordstate>(\$\{) { /* the beginning of a ${} construct. prepare and pop into curlystate */
@@ -632,6 +641,8 @@ includes { STORE_POS; return KW_INCLUDES;}
}
}
+<*>.|\n { /* default rule */ ast_log(LOG_ERROR,"Unhandled char(s): %s\n", yytext); }
+
%%
static void pbcpush(char x)
diff --git a/pbx/ael/ael_lex.c b/pbx/ael/ael_lex.c
index 172d2f5d2..94f95e03a 100644
--- a/pbx/ael/ael_lex.c
+++ b/pbx/ael/ael_lex.c
@@ -352,8 +352,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
*yy_cp = '\0'; \
yyg->yy_c_buf_p = yy_cp;
-#define YY_NUM_RULES 73
-#define YY_END_OF_BUFFER 74
+#define YY_NUM_RULES 74
+#define YY_END_OF_BUFFER 75
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -364,7 +364,7 @@ struct yy_trans_info
static yyconst flex_int16_t yy_accept[284] =
{ 0,
0, 0, 0, 0, 0, 0, 0, 0, 42, 42,
- 0, 0, 0, 0, 0, 0, 74, 73, 49, 47,
+ 0, 0, 0, 0, 0, 0, 75, 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,
@@ -797,6 +797,12 @@ static yyconst flex_int16_t yy_chk[1073] =
* This renames also ael_yywrap, but since we do not use it, we just
* add option noyywrap to remove it.
*/
+/* I specify this option to suppress flex generating code with ECHO
+ in it. This generates compiler warnings in some systems; We've
+ seen the fwrite generate Unused variable warnings with 4.1.2 gcc.
+ Some systems have tweaked flex ECHO macro to keep the compiler
+ happy. To keep the warning message from getting output, I added
+ a default rule at the end of the patterns section */
/* ael_yyfree normally just frees its arg. It can be null sometimes,
which some systems will complain about, so, we'll define our own version */
/* batch gives a bit more performance if we are using it in
@@ -811,7 +817,7 @@ static yyconst flex_int16_t yy_chk[1073] =
* bison-bridge passes an additional yylval argument to ael_yylex().
* bison-locations is probably not needed.
*/
-#line 63 "ael.flex"
+#line 71 "ael.flex"
#if !defined(STANDALONE_AEL)
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#endif
@@ -945,7 +951,7 @@ static void pbcwhere(const char *text, int *line, int *col )
#define STORE_POS
#define STORE_LOC
#endif
-#line 948 "ael_lex.c"
+#line 954 "ael_lex.c"
#define INITIAL 0
#define paren 1
@@ -1193,10 +1199,10 @@ YY_DECL
register int yy_act;
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-#line 206 "ael.flex"
+#line 214 "ael.flex"
-#line 1199 "ael_lex.c"
+#line 1205 "ael_lex.c"
yylval = yylval_param;
@@ -1287,255 +1293,255 @@ do_action: /* This label is used only to access EOF actions. */
case 1:
YY_RULE_SETUP
-#line 208 "ael.flex"
+#line 216 "ael.flex"
{ STORE_POS; return LC;}
YY_BREAK
case 2:
YY_RULE_SETUP
-#line 209 "ael.flex"
+#line 217 "ael.flex"
{ STORE_POS; return RC;}
YY_BREAK
case 3:
YY_RULE_SETUP
-#line 210 "ael.flex"
+#line 218 "ael.flex"
{ STORE_POS; return LP;}
YY_BREAK
case 4:
YY_RULE_SETUP
-#line 211 "ael.flex"
+#line 219 "ael.flex"
{ STORE_POS; return RP;}
YY_BREAK
case 5:
YY_RULE_SETUP
-#line 212 "ael.flex"
+#line 220 "ael.flex"
{ STORE_POS; return SEMI;}
YY_BREAK
case 6:
YY_RULE_SETUP
-#line 213 "ael.flex"
+#line 221 "ael.flex"
{ STORE_POS; return EQ;}
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 214 "ael.flex"
+#line 222 "ael.flex"
{ STORE_POS; return COMMA;}
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 215 "ael.flex"
+#line 223 "ael.flex"
{ STORE_POS; return COLON;}
YY_BREAK
case 9:
YY_RULE_SETUP
-#line 216 "ael.flex"
+#line 224 "ael.flex"
{ STORE_POS; return AMPER;}
YY_BREAK
case 10:
YY_RULE_SETUP
-#line 217 "ael.flex"
+#line 225 "ael.flex"
{ STORE_POS; return BAR;}
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 218 "ael.flex"
+#line 226 "ael.flex"
{ STORE_POS; return EXTENMARK;}
YY_BREAK
case 12:
YY_RULE_SETUP
-#line 219 "ael.flex"
+#line 227 "ael.flex"
{ STORE_POS; return AT;}
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 220 "ael.flex"
+#line 228 "ael.flex"
{/*comment*/}
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 221 "ael.flex"
+#line 229 "ael.flex"
{ STORE_POS; return KW_CONTEXT;}
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 222 "ael.flex"
+#line 230 "ael.flex"
{ STORE_POS; return KW_ABSTRACT;}
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 223 "ael.flex"
+#line 231 "ael.flex"
{ STORE_POS; return KW_EXTEND;}
YY_BREAK
case 17:
YY_RULE_SETUP
-#line 224 "ael.flex"
+#line 232 "ael.flex"
{ STORE_POS; return KW_MACRO;};
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 225 "ael.flex"
+#line 233 "ael.flex"
{ STORE_POS; return KW_GLOBALS;}
YY_BREAK
case 19:
YY_RULE_SETUP
-#line 226 "ael.flex"
+#line 234 "ael.flex"
{ STORE_POS; return KW_IGNOREPAT;}
YY_BREAK
case 20:
YY_RULE_SETUP
-#line 227 "ael.flex"
+#line 235 "ael.flex"
{ STORE_POS; return KW_SWITCH;}
YY_BREAK
case 21:
YY_RULE_SETUP
-#line 228 "ael.flex"
+#line 236 "ael.flex"
{ STORE_POS; return KW_IF;}
YY_BREAK
case 22:
YY_RULE_SETUP
-#line 229 "ael.flex"
+#line 237 "ael.flex"
{ STORE_POS; return KW_IFTIME;}
YY_BREAK
case 23:
YY_RULE_SETUP
-#line 230 "ael.flex"
+#line 238 "ael.flex"
{ STORE_POS; return KW_RANDOM;}
YY_BREAK
case 24:
YY_RULE_SETUP
-#line 231 "ael.flex"
+#line 239 "ael.flex"
{ STORE_POS; return KW_REGEXTEN;}
YY_BREAK
case 25:
YY_RULE_SETUP
-#line 232 "ael.flex"
+#line 240 "ael.flex"
{ STORE_POS; return KW_HINT;}
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 233 "ael.flex"
+#line 241 "ael.flex"
{ STORE_POS; return KW_ELSE;}
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 234 "ael.flex"
+#line 242 "ael.flex"
{ STORE_POS; return KW_GOTO;}
YY_BREAK
case 28:
YY_RULE_SETUP
-#line 235 "ael.flex"
+#line 243 "ael.flex"
{ STORE_POS; return KW_JUMP;}
YY_BREAK
case 29:
YY_RULE_SETUP
-#line 236 "ael.flex"
+#line 244 "ael.flex"
{ STORE_POS; return KW_RETURN;}
YY_BREAK
case 30:
YY_RULE_SETUP
-#line 237 "ael.flex"
+#line 245 "ael.flex"
{ STORE_POS; return KW_BREAK;}
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 238 "ael.flex"
+#line 246 "ael.flex"
{ STORE_POS; return KW_CONTINUE;}
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 239 "ael.flex"
+#line 247 "ael.flex"
{ STORE_POS; return KW_FOR;}
YY_BREAK
case 33:
YY_RULE_SETUP
-#line 240 "ael.flex"
+#line 248 "ael.flex"
{ STORE_POS; return KW_WHILE;}
YY_BREAK
case 34:
YY_RULE_SETUP
-#line 241 "ael.flex"
+#line 249 "ael.flex"
{ STORE_POS; return KW_CASE;}
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 242 "ael.flex"
+#line 250 "ael.flex"
{ STORE_POS; return KW_DEFAULT;}
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 243 "ael.flex"
+#line 251 "ael.flex"
{ STORE_POS; return KW_PATTERN;}
YY_BREAK
case 37:
YY_RULE_SETUP
-#line 244 "ael.flex"
+#line 252 "ael.flex"
{ STORE_POS; return KW_CATCH;}
YY_BREAK
case 38:
YY_RULE_SETUP
-#line 245 "ael.flex"
+#line 253 "ael.flex"
{ STORE_POS; return KW_SWITCHES;}
YY_BREAK
case 39:
YY_RULE_SETUP
-#line 246 "ael.flex"
+#line 254 "ael.flex"
{ STORE_POS; return KW_ESWITCHES;}
YY_BREAK
case 40:
YY_RULE_SETUP
-#line 247 "ael.flex"
+#line 255 "ael.flex"
{ STORE_POS; return KW_INCLUDES;}
YY_BREAK
case 41:
YY_RULE_SETUP
-#line 248 "ael.flex"
+#line 256 "ael.flex"
{ BEGIN(comment); my_col += 2; }
YY_BREAK
case 42:
YY_RULE_SETUP
-#line 250 "ael.flex"
+#line 258 "ael.flex"
{ my_col += yyleng; }
YY_BREAK
case 43:
/* rule 43 can match eol */
YY_RULE_SETUP
-#line 251 "ael.flex"
+#line 259 "ael.flex"
{ ++my_lineno; my_col=1;}
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 252 "ael.flex"
+#line 260 "ael.flex"
{ my_col += yyleng; }
YY_BREAK
case 45:
/* rule 45 can match eol */
YY_RULE_SETUP
-#line 253 "ael.flex"
+#line 261 "ael.flex"
{ ++my_lineno; my_col=1;}
YY_BREAK
case 46:
YY_RULE_SETUP
-#line 254 "ael.flex"
+#line 262 "ael.flex"
{ my_col += 2; BEGIN(INITIAL); } /* the nice thing about comments is that you know exactly what ends them */
YY_BREAK
case 47:
/* rule 47 can match eol */
YY_RULE_SETUP
-#line 256 "ael.flex"
+#line 264 "ael.flex"
{ my_lineno++; my_col = 1; }
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 257 "ael.flex"
+#line 265 "ael.flex"
{ my_col += yyleng; }
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 258 "ael.flex"
+#line 266 "ael.flex"
{ my_col += (yyleng*8)-(my_col%8); }
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 260 "ael.flex"
+#line 268 "ael.flex"
{
/* 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".-
@@ -1564,17 +1570,17 @@ YY_RULE_SETUP
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 285 "ael.flex"
+#line 294 "ael.flex"
{ yymore(); /* Keep going */ }
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 286 "ael.flex"
+#line 295 "ael.flex"
{ yymore(); /* Keep Going */ }
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 287 "ael.flex"
+#line 296 "ael.flex"
{ /* the beginning of a ${} construct. prepare and pop into curlystate */
parencount2 = 0;
pbcpos2 = 0;
@@ -1585,7 +1591,7 @@ YY_RULE_SETUP
YY_BREAK
case 54:
YY_RULE_SETUP
-#line 294 "ael.flex"
+#line 303 "ael.flex"
{ /* the beginning of a $[] construct. prepare and pop into brackstate */
parencount3 = 0;
pbcpos3 = 0;
@@ -1597,7 +1603,7 @@ YY_RULE_SETUP
case 55:
/* rule 55 can match eol */
YY_RULE_SETUP
-#line 301 "ael.flex"
+#line 310 "ael.flex"
{
/* a non-word constituent char, like a space, tab, curly, paren, etc */
char c = yytext[yyleng-1];
@@ -1614,7 +1620,7 @@ YY_RULE_SETUP
case 56:
/* rule 56 can match eol */
YY_RULE_SETUP
-#line 313 "ael.flex"
+#line 322 "ael.flex"
{
if ( pbcpop2('}') ) { /* error */
STORE_LOC;
@@ -1637,7 +1643,7 @@ YY_RULE_SETUP
case 57:
/* rule 57 can match eol */
YY_RULE_SETUP
-#line 332 "ael.flex"
+#line 341 "ael.flex"
{
char c = yytext[yyleng-1];
if (c == '{')
@@ -1649,7 +1655,7 @@ YY_RULE_SETUP
case 58:
/* rule 58 can match eol */
YY_RULE_SETUP
-#line 340 "ael.flex"
+#line 349 "ael.flex"
{
char c = yytext[yyleng-1];
if ( pbcpop2(c)) { /* error */
@@ -1668,7 +1674,7 @@ YY_RULE_SETUP
case 59:
/* rule 59 can match eol */
YY_RULE_SETUP
-#line 356 "ael.flex"
+#line 365 "ael.flex"
{
if ( pbcpop3(']') ) { /* error */
STORE_LOC;
@@ -1691,7 +1697,7 @@ YY_RULE_SETUP
case 60:
/* rule 60 can match eol */
YY_RULE_SETUP
-#line 375 "ael.flex"
+#line 384 "ael.flex"
{
char c = yytext[yyleng-1];
if (c == '[')
@@ -1703,7 +1709,7 @@ YY_RULE_SETUP
case 61:
/* rule 61 can match eol */
YY_RULE_SETUP
-#line 383 "ael.flex"
+#line 392 "ael.flex"
{
char c = yytext[yyleng-1];
if ( pbcpop3(c)) { /* error */
@@ -1729,7 +1735,7 @@ YY_RULE_SETUP
case 62:
/* rule 62 can match eol */
YY_RULE_SETUP
-#line 406 "ael.flex"
+#line 415 "ael.flex"
{
if ( pbcpop(')') ) { /* error */
STORE_LOC;
@@ -1758,7 +1764,7 @@ YY_RULE_SETUP
case 63:
/* rule 63 can match eol */
YY_RULE_SETUP
-#line 431 "ael.flex"
+#line 440 "ael.flex"
{
char c = yytext[yyleng-1];
if (c == '(')
@@ -1770,7 +1776,7 @@ YY_RULE_SETUP
case 64:
/* rule 64 can match eol */
YY_RULE_SETUP
-#line 439 "ael.flex"
+#line 448 "ael.flex"
{
char c = yytext[yyleng-1];
if ( pbcpop(c)) { /* error */
@@ -1797,7 +1803,7 @@ YY_RULE_SETUP
case 65:
/* rule 65 can match eol */
YY_RULE_SETUP
-#line 463 "ael.flex"
+#line 472 "ael.flex"
{
char c = yytext[yyleng-1];
if (c == '(')
@@ -1809,7 +1815,7 @@ YY_RULE_SETUP
case 66:
/* rule 66 can match eol */
YY_RULE_SETUP
-#line 471 "ael.flex"
+#line 480 "ael.flex"
{
if ( pbcpop(')') ) { /* error */
STORE_LOC;
@@ -1840,7 +1846,7 @@ YY_RULE_SETUP
case 67:
/* rule 67 can match eol */
YY_RULE_SETUP
-#line 498 "ael.flex"
+#line 507 "ael.flex"
{
if( parencount != 0) { /* ast_log(LOG_NOTICE,"Folding in a comma!\n"); */
yymore();
@@ -1859,7 +1865,7 @@ YY_RULE_SETUP
case 68:
/* rule 68 can match eol */
YY_RULE_SETUP
-#line 513 "ael.flex"
+#line 522 "ael.flex"
{
char c = yytext[yyleng-1];
if ( pbcpop(c) ) { /* error */
@@ -1882,7 +1888,7 @@ YY_RULE_SETUP
case 69:
/* rule 69 can match eol */
YY_RULE_SETUP
-#line 532 "ael.flex"
+#line 541 "ael.flex"
{
char c = yytext[yyleng-1];
yymore();
@@ -1892,7 +1898,7 @@ YY_RULE_SETUP
case 70:
/* rule 70 can match eol */
YY_RULE_SETUP
-#line 538 "ael.flex"
+#line 547 "ael.flex"
{
char c = yytext[yyleng-1];
if ( pbcpop(c) ) { /* error */
@@ -1910,7 +1916,7 @@ YY_RULE_SETUP
case 71:
/* rule 71 can match eol */
YY_RULE_SETUP
-#line 552 "ael.flex"
+#line 561 "ael.flex"
{
STORE_LOC;
yylval->str = malloc(yyleng);
@@ -1924,7 +1930,7 @@ YY_RULE_SETUP
case 72:
/* rule 72 can match eol */
YY_RULE_SETUP
-#line 562 "ael.flex"
+#line 571 "ael.flex"
{
char fnamebuf[1024],*p1,*p2;
int glob_ret;
@@ -1973,7 +1979,7 @@ case YY_STATE_EOF(comment):
case YY_STATE_EOF(curlystate):
case YY_STATE_EOF(wordstate):
case YY_STATE_EOF(brackstate):
-#line 603 "ael.flex"
+#line 612 "ael.flex"
{
char fnamebuf[2048];
if (include_stack_index > 0 && include_stack[include_stack_index-1].globbuf_pos < include_stack[include_stack_index-1].globbuf.gl_pathc-1) {
@@ -2007,11 +2013,17 @@ case YY_STATE_EOF(brackstate):
}
YY_BREAK
case 73:
+/* rule 73 can match eol */
+YY_RULE_SETUP
+#line 644 "ael.flex"
+{ /* default rule */ ast_log(LOG_ERROR,"Unhandled char(s): %s\n", yytext); }
+ YY_BREAK
+case 74:
YY_RULE_SETUP
-#line 635 "ael.flex"
-ECHO;
+#line 646 "ael.flex"
+YY_FATAL_ERROR( "flex scanner jammed" );
YY_BREAK
-#line 2014 "ael_lex.c"
+#line 2026 "ael_lex.c"
case YY_END_OF_BUFFER:
{
@@ -3184,7 +3196,7 @@ void *ael_yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner)
#define YYTABLES_NAME "yytables"
-#line 635 "ael.flex"
+#line 646 "ael.flex"