From db14f6b1077df28061c5b9041bcda5ba8e49a863 Mon Sep 17 00:00:00 2001 From: Luigi Rizzo Date: Sun, 30 Apr 2006 23:21:49 +0000 Subject: revert ael.flex to the last correct version. For some reason the makefile did not regenerate the ael_lex.c file correctly so i was not testing the changes. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@23781 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- pbx/ael/ael.flex | 59 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 34 insertions(+), 25 deletions(-) (limited to 'pbx/ael') diff --git a/pbx/ael/ael.flex b/pbx/ael/ael.flex index 24a621acf..45cd1e0d4 100644 --- a/pbx/ael/ael.flex +++ b/pbx/ael/ael.flex @@ -74,6 +74,7 @@ static void pbcpush(char x); static int pbcpop(char x); static int parencount = 0; +static int commaout = 0; /* * current line, column and filename, updated as we read the input. @@ -239,11 +240,10 @@ includes { STORE_POS; return KW_INCLUDES;} } else { STORE_LOC; yylval->str = strdup(yytext); - yylval->str[yyleng - 1] = '\0'; /* trim trailing ')' */ + yylval->str[strlen(yylval->str)-1] = '\0'; /* trim trailing ')' */ unput(')'); - /* XXX should do my_col-- as we do in other cases ? */ BEGIN(0); - return word; /* note it can be an empty string */ + return word; } } @@ -290,18 +290,19 @@ includes { STORE_POS; return KW_INCLUDES;} yymore(); } else { STORE_LOC; - /* we have at least 1 char. - * If it is a single ')', just return it. - * XXX this means we never return an empty 'word' in this context - */ - if ( !strcmp(yytext, ")") ) - return RP; yylval->str = strdup(yytext); - yylval->str[yyleng-1] = '\0'; /* trim trailing ')' */ + if(yyleng > 1 ) + yylval->str[yyleng-1] = '\0'; /* trim trailing ')' */ BEGIN(0); - unput(')'); - my_col--; /* XXX not entirely correct, should go 'back' by 1 char */ - return word; + if ( !strcmp(yylval->str,")") ) { + free(yylval->str); + yylval->str = 0; + my_col++; /* XXX why ? */ + return RP; + } else { + unput(')'); + return word; + } } } @@ -310,18 +311,24 @@ includes { STORE_POS; return KW_INCLUDES;} yymore(); } else { STORE_LOC; - /* we have at least 1 char. - * If it is a single ',', just return it. - * XXX this means we never return an empty 'word' in this context - */ - if (!strcmp(yytext, "," ) ) + if( !commaout ) { + if( !strcmp(yytext,"," ) ) { + commaout = 0; + my_col+=1; + return COMMA; + } + yylval->str = strdup(yytext); + /* printf("Got argg2 word %s\n", yylval->str); */ + unput(','); + commaout = 1; + if (yyleng > 1 ) + *(yylval->str+yyleng-1)=0; + return word; + } else { + commaout = 0; + my_col+=1; return COMMA; - /* otherwise return the string first, then the comma. */ - yylval->str = strdup(yytext); - yylval->str[yyleng-1] = '\0'; /* trim the comma off the string */ - unput(','); - my_col--; /* XXX not entirely correct, should go 'back' by 1 char */ - return word; + } } } @@ -360,7 +367,8 @@ includes { STORE_POS; return KW_INCLUDES;} {NOSEMIC}; { STORE_LOC; yylval->str = strdup(yytext); - yylval->str[yyleng-1] = '\0'; + if(yyleng > 1) + *(yylval->str+yyleng-1)=0; unput(';'); BEGIN(0); return word; @@ -522,6 +530,7 @@ void reset_argcount(yyscan_t yyscanner ) struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; parencount = 0; pbcpos = 0; + commaout = 0; pbcpush('('); c_prevword(); BEGIN(argg); -- cgit v1.2.3