remove common blocks of code with a macro (waiting for a better
authorLuigi Rizzo <rizzo@icir.org>
Wed, 26 Apr 2006 23:18:03 +0000 (23:18 +0000)
committerLuigi Rizzo <rizzo@icir.org>
Wed, 26 Apr 2006 23:18:03 +0000 (23:18 +0000)
solution).

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@22679 65c4cc65-6c06-0410-ace0-fbb531ad65f3

pbx/ael/ael.flex
pbx/ael/ael_lex.c

index 9466c6c..6748135 100644 (file)
@@ -56,6 +56,12 @@ struct stackelement {
 static struct stackelement  include_stack[MAX_INCLUDE_DEPTH];
 static int include_stack_index = 0;
 
+#define        STORE_POS do {                                                  \
+               yylloc->first_line = yylloc->last_line = my_lineno;     \
+               yylloc->last_column=my_col+yyleng-1;                    \
+               yylloc->first_column=my_col;                            \
+               my_col+=yyleng;                                         \
+       } while (0)
 %}
 
 %x paren semic argg
@@ -69,55 +75,52 @@ static int include_stack_index = 0;
 %option noyywrap
 
 %%
-\{     {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return LC;}
-\}     {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return RC;}
-\(     {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return LP;}
-\)     {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return RP;}
-\;     {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return SEMI;}
-\=     {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return EQ;}
-\,     {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return COMMA;}
-\:     {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return COLON;}
-\&     {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return AMPER;}
-\|     {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return BAR;}
-\=\>   {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return EXTENMARK;}
-\@     {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return AT;}
-\/\/[^\n]*  {/*comment*/}
-context        {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_CONTEXT;}
-abstract       {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_ABSTRACT;}
-macro  {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_MACRO;};
-globals        {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_GLOBALS;}
-ignorepat      {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_IGNOREPAT;}
-switch {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_SWITCH;}
-if     {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_IF;}
-ifTime {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_IFTIME;}
-random {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_RANDOM;}
-regexten       {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_REGEXTEN;}
-hint   {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_HINT;}
-else   {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_ELSE;}
-goto   {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_GOTO;}
-jump   {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_JUMP;}
-return {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_RETURN;}
-break  {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_BREAK;}
-continue       {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_CONTINUE;}
-for    {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_FOR;}
-while  {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_WHILE;}
-case   {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_CASE;}
-default        {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_DEFAULT;}
-pattern        {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_PATTERN;}
-catch  {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_CATCH;}
-switches       {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_SWITCHES;}
-eswitches      {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_ESWITCHES;}
-includes       {yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_INCLUDES;}
+\{             { STORE_POS; return LC;}
+\}             { STORE_POS; return RC;}
+\(             { STORE_POS; return LP;}
+\)             { STORE_POS; return RP;}
+\;             { STORE_POS; return SEMI;}
+\=             { STORE_POS; return EQ;}
+\,             { STORE_POS; return COMMA;}
+\:             { STORE_POS; return COLON;}
+\&             { STORE_POS; return AMPER;}
+\|             { STORE_POS; return BAR;}
+\=\>           { STORE_POS; return EXTENMARK;}
+\@             { STORE_POS; return AT;}
+\/\/[^\n]*     {/*comment*/}
+context                { STORE_POS; return KW_CONTEXT;}
+abstract       { STORE_POS; return KW_ABSTRACT;}
+macro          { STORE_POS; return KW_MACRO;};
+globals                { STORE_POS; return KW_GLOBALS;}
+ignorepat      { STORE_POS; return KW_IGNOREPAT;}
+switch         { STORE_POS; return KW_SWITCH;}
+if             { STORE_POS; return KW_IF;}
+ifTime         { STORE_POS; return KW_IFTIME;}
+random         { STORE_POS; return KW_RANDOM;}
+regexten       { STORE_POS; return KW_REGEXTEN;}
+hint           { STORE_POS; return KW_HINT;}
+else           { STORE_POS; return KW_ELSE;}
+goto           { STORE_POS; return KW_GOTO;}
+jump           { STORE_POS; return KW_JUMP;}
+return         { STORE_POS; return KW_RETURN;}
+break          { STORE_POS; return KW_BREAK;}
+continue       { STORE_POS; return KW_CONTINUE;}
+for            { STORE_POS; return KW_FOR;}
+while          { STORE_POS; return KW_WHILE;}
+case           { STORE_POS; return KW_CASE;}
+default                { STORE_POS; return KW_DEFAULT;}
+pattern                { STORE_POS; return KW_PATTERN;}
+catch          { STORE_POS; return KW_CATCH;}
+switches       { STORE_POS; return KW_SWITCHES;}
+eswitches      { STORE_POS; return KW_ESWITCHES;}
+includes       { STORE_POS; return KW_INCLUDES;}
 
 \n             {my_lineno++;my_col=0;}
 [ ]+   {/* nothing */ my_col+=yyleng;}
 [      ]+      {/* nothing */ int wid = 8-(my_col%8); my_col+=wid;}
 
 [-a-zA-Z0-9'"_/.\<\>\*\+!$#\[\]][-a-zA-Z0-9'"_/.!\*\+\<\>\{\}$#\[\]]*  {
-               yylloc->first_line = yylloc->last_line = my_lineno;
-               yylloc->last_column=my_col+yyleng-1;
-               yylloc->first_column=my_col; /* set up the ptr */
-               my_col+=yyleng;
+               STORE_POS;
                yylval->str = strdup(yytext);
                /* printf("\nGot WORD %s[%d][%d:%d]\n", yylval->str, my_lineno ,yylloc->first_column,yylloc->last_column );  */
                prev_word = yylval->str;
index 3e6ced1..aa53ebf 100644 (file)
@@ -691,9 +691,15 @@ struct stackelement {
 static struct stackelement  include_stack[MAX_INCLUDE_DEPTH];
 static int include_stack_index = 0;
 
+#define        STORE_POS do {                                                  \
+               yylloc->first_line = yylloc->last_line = my_lineno;     \
+               yylloc->last_column=my_col+yyleng-1;                    \
+               yylloc->first_column=my_col;                            \
+               my_col+=yyleng;                                         \
+       } while (0)
 
 /* %option yylineno I've tried hard, but haven't been able to use this */
-#line 697 "ael_lex.c"
+#line 703 "ael_lex.c"
 
 #define INITIAL 0
 #define paren 1
@@ -933,9 +939,9 @@ YY_DECL
        register int yy_act;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
-#line 71 "ael.flex"
+#line 77 "ael.flex"
 
-#line 939 "ael_lex.c"
+#line 945 "ael_lex.c"
 
     yylval = yylval_param;
 
@@ -1026,223 +1032,220 @@ do_action:    /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 72 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return LC;}
+#line 78 "ael.flex"
+{ STORE_POS; return LC;}
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 73 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return RC;}
+#line 79 "ael.flex"
+{ STORE_POS; return RC;}
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 74 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return LP;}
+#line 80 "ael.flex"
+{ STORE_POS; return LP;}
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 75 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return RP;}
+#line 81 "ael.flex"
+{ STORE_POS; return RP;}
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 76 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return SEMI;}
+#line 82 "ael.flex"
+{ STORE_POS; return SEMI;}
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 77 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return EQ;}
+#line 83 "ael.flex"
+{ STORE_POS; return EQ;}
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 78 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return COMMA;}
+#line 84 "ael.flex"
+{ STORE_POS; return COMMA;}
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 79 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return COLON;}
+#line 85 "ael.flex"
+{ STORE_POS; return COLON;}
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 80 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return AMPER;}
+#line 86 "ael.flex"
+{ STORE_POS; return AMPER;}
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 81 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return BAR;}
+#line 87 "ael.flex"
+{ STORE_POS; return BAR;}
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 82 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return EXTENMARK;}
+#line 88 "ael.flex"
+{ STORE_POS; return EXTENMARK;}
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 83 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return AT;}
+#line 89 "ael.flex"
+{ STORE_POS; return AT;}
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 84 "ael.flex"
+#line 90 "ael.flex"
 {/*comment*/}
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 85 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_CONTEXT;}
+#line 91 "ael.flex"
+{ STORE_POS; return KW_CONTEXT;}
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 86 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_ABSTRACT;}
+#line 92 "ael.flex"
+{ STORE_POS; return KW_ABSTRACT;}
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 87 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_MACRO;};
+#line 93 "ael.flex"
+{ STORE_POS; return KW_MACRO;};
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 88 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_GLOBALS;}
+#line 94 "ael.flex"
+{ STORE_POS; return KW_GLOBALS;}
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 89 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_IGNOREPAT;}
+#line 95 "ael.flex"
+{ STORE_POS; return KW_IGNOREPAT;}
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 90 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_SWITCH;}
+#line 96 "ael.flex"
+{ STORE_POS; return KW_SWITCH;}
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 91 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_IF;}
+#line 97 "ael.flex"
+{ STORE_POS; return KW_IF;}
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 92 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_IFTIME;}
+#line 98 "ael.flex"
+{ STORE_POS; return KW_IFTIME;}
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 93 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_RANDOM;}
+#line 99 "ael.flex"
+{ STORE_POS; return KW_RANDOM;}
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 94 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_REGEXTEN;}
+#line 100 "ael.flex"
+{ STORE_POS; return KW_REGEXTEN;}
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 95 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_HINT;}
+#line 101 "ael.flex"
+{ STORE_POS; return KW_HINT;}
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 96 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_ELSE;}
+#line 102 "ael.flex"
+{ STORE_POS; return KW_ELSE;}
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 97 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_GOTO;}
+#line 103 "ael.flex"
+{ STORE_POS; return KW_GOTO;}
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 98 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_JUMP;}
+#line 104 "ael.flex"
+{ STORE_POS; return KW_JUMP;}
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 99 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_RETURN;}
+#line 105 "ael.flex"
+{ STORE_POS; return KW_RETURN;}
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 100 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_BREAK;}
+#line 106 "ael.flex"
+{ STORE_POS; return KW_BREAK;}
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 101 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_CONTINUE;}
+#line 107 "ael.flex"
+{ STORE_POS; return KW_CONTINUE;}
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 102 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_FOR;}
+#line 108 "ael.flex"
+{ STORE_POS; return KW_FOR;}
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 103 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_WHILE;}
+#line 109 "ael.flex"
+{ STORE_POS; return KW_WHILE;}
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 104 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_CASE;}
+#line 110 "ael.flex"
+{ STORE_POS; return KW_CASE;}
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 105 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_DEFAULT;}
+#line 111 "ael.flex"
+{ STORE_POS; return KW_DEFAULT;}
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 106 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_PATTERN;}
+#line 112 "ael.flex"
+{ STORE_POS; return KW_PATTERN;}
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 107 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_CATCH;}
+#line 113 "ael.flex"
+{ STORE_POS; return KW_CATCH;}
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 108 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_SWITCHES;}
+#line 114 "ael.flex"
+{ STORE_POS; return KW_SWITCHES;}
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 109 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_ESWITCHES;}
+#line 115 "ael.flex"
+{ STORE_POS; return KW_ESWITCHES;}
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 110 "ael.flex"
-{yylloc->first_line = yylloc->last_line = my_lineno; yylloc->last_column=my_col+yyleng-1; yylloc->first_column=my_col;my_col+=yyleng;return KW_INCLUDES;}
+#line 116 "ael.flex"
+{ STORE_POS; return KW_INCLUDES;}
        YY_BREAK
 case 40:
 /* rule 40 can match eol */
 YY_RULE_SETUP
-#line 112 "ael.flex"
+#line 118 "ael.flex"
 {my_lineno++;my_col=0;}
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 113 "ael.flex"
+#line 119 "ael.flex"
 {/* nothing */ my_col+=yyleng;}
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 114 "ael.flex"
+#line 120 "ael.flex"
 {/* nothing */ int wid = 8-(my_col%8); my_col+=wid;}
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 116 "ael.flex"
+#line 122 "ael.flex"
 {
-               yylloc->first_line = yylloc->last_line = my_lineno;
-               yylloc->last_column=my_col+yyleng-1;
-               yylloc->first_column=my_col; /* set up the ptr */
-               my_col+=yyleng;
+               STORE_POS;
                yylval->str = strdup(yytext);
                /* printf("\nGot WORD %s[%d][%d:%d]\n", yylval->str, my_lineno ,yylloc->first_column,yylloc->last_column );  */
                prev_word = yylval->str;
@@ -1252,7 +1255,7 @@ YY_RULE_SETUP
 case 44:
 /* rule 44 can match eol */
 YY_RULE_SETUP
-#line 127 "ael.flex"
+#line 130 "ael.flex"
 {
                yylloc->first_line = my_lineno;
                yylloc->first_column=my_col;
@@ -1292,7 +1295,7 @@ YY_RULE_SETUP
 case 45:
 /* rule 45 can match eol */
 YY_RULE_SETUP
-#line 163 "ael.flex"
+#line 166 "ael.flex"
 {
                yylloc->first_line = my_lineno; yylloc->first_column=my_col;
                parencount++;
@@ -1303,13 +1306,13 @@ YY_RULE_SETUP
 case 46:
 /* rule 46 can match eol */
 YY_RULE_SETUP
-#line 170 "ael.flex"
+#line 173 "ael.flex"
 {yylloc->first_line = my_lineno;yylloc->first_column=my_col; yymore(); pbcpush('['); }
        YY_BREAK
 case 47:
 /* rule 47 can match eol */
 YY_RULE_SETUP
-#line 172 "ael.flex"
+#line 175 "ael.flex"
 {
                yylloc->first_line = my_lineno;yylloc->first_column=my_col;
                if ( pbcpop(']') ) {
@@ -1331,13 +1334,13 @@ YY_RULE_SETUP
 case 48:
 /* rule 48 can match eol */
 YY_RULE_SETUP
-#line 190 "ael.flex"
+#line 193 "ael.flex"
 {yylloc->first_line = my_lineno;yylloc->first_column=my_col;  yymore(); pbcpush('{'); }
        YY_BREAK
 case 49:
 /* rule 49 can match eol */
 YY_RULE_SETUP
-#line 192 "ael.flex"
+#line 195 "ael.flex"
 {
                yylloc->first_line = my_lineno;
                yylloc->first_column=my_col;
@@ -1360,7 +1363,7 @@ YY_RULE_SETUP
 case 50:
 /* rule 50 can match eol */
 YY_RULE_SETUP
-#line 211 "ael.flex"
+#line 214 "ael.flex"
 {
                /* printf("ARGG:%s\n",yytext); */
                int linecount = 0;
@@ -1420,7 +1423,7 @@ YY_RULE_SETUP
 case 51:
 /* rule 51 can match eol */
 YY_RULE_SETUP
-#line 267 "ael.flex"
+#line 270 "ael.flex"
 {
                /* printf("ARGG:%s\n",yytext); */
                /* printf("GOT AN LP!!!\n"); */
@@ -1434,7 +1437,7 @@ YY_RULE_SETUP
 case 52:
 /* rule 52 can match eol */
 YY_RULE_SETUP
-#line 277 "ael.flex"
+#line 280 "ael.flex"
 {
                /* printf("ARGG:%s\n",yytext); */
                if( parencount != 0) {
@@ -1484,7 +1487,7 @@ YY_RULE_SETUP
 case 53:
 /* rule 53 can match eol */
 YY_RULE_SETUP
-#line 323 "ael.flex"
+#line 326 "ael.flex"
 {
                /*printf("ARGG:%s\n",yytext);*/
                yylloc->first_line = my_lineno;
@@ -1495,7 +1498,7 @@ YY_RULE_SETUP
 case 54:
 /* rule 54 can match eol */
 YY_RULE_SETUP
-#line 330 "ael.flex"
+#line 333 "ael.flex"
 {
                /*printf("ARGG:%s\n",yytext);*/yylloc->first_line = my_lineno;yylloc->first_column=my_col;
                if ( pbcpop('}') ) {
@@ -1517,13 +1520,13 @@ YY_RULE_SETUP
 case 55:
 /* rule 55 can match eol */
 YY_RULE_SETUP
-#line 348 "ael.flex"
+#line 351 "ael.flex"
 {/*printf("ARGG:%s\n",yytext);*/yylloc->first_line = my_lineno;yylloc->first_column=my_col; yymore(); pbcpush('['); }
        YY_BREAK
 case 56:
 /* rule 56 can match eol */
 YY_RULE_SETUP
-#line 350 "ael.flex"
+#line 353 "ael.flex"
 {/*printf("ARGG:%s\n",yytext);*/yylloc->first_line = my_lineno;yylloc->first_column=my_col;
                if ( pbcpop(']') ) {
                        /* error */
@@ -1544,13 +1547,13 @@ YY_RULE_SETUP
 case 57:
 /* rule 57 can match eol */
 YY_RULE_SETUP
-#line 367 "ael.flex"
+#line 370 "ael.flex"
 {/*printf("SEMIC:%s\n",yytext);*/yylloc->first_line = my_lineno;yylloc->first_column=my_col; yymore(); pbcpush('['); }
        YY_BREAK
 case 58:
 /* rule 58 can match eol */
 YY_RULE_SETUP
-#line 369 "ael.flex"
+#line 372 "ael.flex"
 {/*printf("SEMIC:%s\n",yytext);*/yylloc->first_line = my_lineno;yylloc->first_column=my_col;
                if ( pbcpop(']') ) {
                        /* error */
@@ -1571,13 +1574,13 @@ YY_RULE_SETUP
 case 59:
 /* rule 59 can match eol */
 YY_RULE_SETUP
-#line 386 "ael.flex"
+#line 389 "ael.flex"
 {/*printf("SEMIC:%s\n",yytext);*/yylloc->first_line = my_lineno;yylloc->first_column=my_col; yymore(); pbcpush('{');}
        YY_BREAK
 case 60:
 /* rule 60 can match eol */
 YY_RULE_SETUP
-#line 388 "ael.flex"
+#line 391 "ael.flex"
 {/*printf("SEMIC:%s\n",yytext);*/yylloc->first_line = my_lineno;yylloc->first_column=my_col;
                if ( pbcpop('}') ) {
                        /* error */
@@ -1598,13 +1601,13 @@ YY_RULE_SETUP
 case 61:
 /* rule 61 can match eol */
 YY_RULE_SETUP
-#line 405 "ael.flex"
+#line 408 "ael.flex"
 {/*printf("SEMIC:%s\n",yytext);*/yylloc->first_line = my_lineno;yylloc->first_column=my_col; yymore(); pbcpush('(');}
        YY_BREAK
 case 62:
 /* rule 62 can match eol */
 YY_RULE_SETUP
-#line 407 "ael.flex"
+#line 410 "ael.flex"
 {/*printf("SEMIC:%s\n",yytext);*/yylloc->first_line = my_lineno;yylloc->first_column=my_col;
                if ( pbcpop(')') ) {
                        /* error */
@@ -1625,7 +1628,7 @@ YY_RULE_SETUP
 case 63:
 /* rule 63 can match eol */
 YY_RULE_SETUP
-#line 424 "ael.flex"
+#line 427 "ael.flex"
 {
                int linecount = 0;
                int colcount = my_col;
@@ -1656,7 +1659,7 @@ YY_RULE_SETUP
 case 64:
 /* rule 64 can match eol */
 YY_RULE_SETUP
-#line 451 "ael.flex"
+#line 454 "ael.flex"
 {
                FILE *in1;
                char fnamebuf[1024],*p1,*p2;
@@ -1723,7 +1726,7 @@ case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(paren):
 case YY_STATE_EOF(semic):
 case YY_STATE_EOF(argg):
-#line 513 "ael.flex"
+#line 516 "ael.flex"
 {
                if ( --include_stack_index < 0 ) {
                        yyterminate();
@@ -1739,10 +1742,10 @@ case YY_STATE_EOF(argg):
        YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 526 "ael.flex"
+#line 529 "ael.flex"
 ECHO;
        YY_BREAK
-#line 1746 "ael_lex.c"
+#line 1749 "ael_lex.c"
 
        case YY_END_OF_BUFFER:
                {
@@ -2872,7 +2875,7 @@ void ael_yyfree (void * ptr , yyscan_t yyscanner)
 
 #define YYTABLES_NAME "yytables"
 
-#line 526 "ael.flex"
+#line 529 "ael.flex"