]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
revert ael.flex to the last correct version.
authorLuigi Rizzo <rizzo@icir.org>
Sun, 30 Apr 2006 23:21:49 +0000 (23:21 +0000)
committerLuigi Rizzo <rizzo@icir.org>
Sun, 30 Apr 2006 23:21:49 +0000 (23:21 +0000)
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

index 24a621acfed886c53a2ce101cbceefed6f5f0c5e..45cd1e0d4d76863d85af8704d607f596cb743c51 100644 (file)
@@ -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;}
 <semic>{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);