- fix miscalculation in column numbers when multiple tabs
authorLuigi Rizzo <rizzo@icir.org>
Fri, 28 Apr 2006 14:17:03 +0000 (14:17 +0000)
committerLuigi Rizzo <rizzo@icir.org>
Fri, 28 Apr 2006 14:17:03 +0000 (14:17 +0000)
  or empty lines are involved;
- change linku1() to return the head of the list (unused at the moment);
- ignore the source line number in runtests as they change with the
  source and cause mismatches in the comparison with the reference output.

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

pbx/ael/ael-test/runtests
pbx/ael/ael.flex
pbx/ael/ael.tab.c
pbx/ael/ael.y
pbx/ael/ael_lex.c

index c0d148d..a8de9ea 100755 (executable)
@@ -1,9 +1,12 @@
 #!/bin/bash
-
+ORIG=`mktemp /tmp/mytest.XXXXXX`
+NEW=`mktemp /tmp/mytest.XXXXXX`
 for i in ael-test*; do
        echo -n Test: $i..................
        (cd $i; ../../../../utils/aelparse -n -d | grep -v -i 'seconds' > ../res.$i)
-       if (diff -q res.$i ref.$i > /dev/null 2>&1 ) then
+       sed 's/line:[0-9]*//; /^Executed.*/d' < res.$i > $NEW
+       sed 's/line:[0-9]*//; /^Executed.*/d' < ref.$i > $ORIG
+       if (diff -q $NEW $ORIG > /dev/null 2>&1 ) then
                echo PASSED
                rm res.$i
        else
@@ -12,3 +15,4 @@ for i in ael-test*; do
        fi
 
 done
+rm $NEW $ORIG
index 280960c..0a063b8 100644 (file)
@@ -213,9 +213,9 @@ switches    { STORE_POS; return KW_SWITCHES;}
 eswitches      { STORE_POS; return KW_ESWITCHES;}
 includes       { STORE_POS; return KW_INCLUDES;}
 
-\n             { my_lineno++; my_col = 0; }
+\n             { my_lineno++; my_col = 1; }
 [ ]+           { my_col += yyleng; }
-[\t]+          { my_col += 8-(my_col%8); }
+[\t]+          { my_col += (yyleng*8)-(my_col%8); }
 
 [-a-zA-Z0-9'"_/.\<\>\*\+!$#\[\]][-a-zA-Z0-9'"_/.!\*\+\<\>\{\}$#\[\]]*  {
                STORE_POS;
index a238eb9..962c278 100644 (file)
 static pval *npval(pvaltype type, int first_line, int last_line,
        int first_column, int last_column);
 
-static void linku1(pval *head, pval *tail);
+static pval * linku1(pval *head, pval *tail);
 
 void reset_parencount(yyscan_t yyscanner);
 void reset_semicount(yyscan_t yyscanner);
@@ -3521,14 +3521,17 @@ static struct pval *npval2(pvaltype type, YYLTYPE *first, YYLTYPE *last)
 }
 
 /* append second element to the list in the first one */
-static void linku1(pval *head, pval *tail)
+static pval * linku1(pval *head, pval *tail)
 {
+       if (!head)
+               return tail;
        if (!head->next) {
                head->next = tail;
        } else {
                head->u1_last->next = tail;
        }
        head->u1_last = tail;
+       return head;
 }
 
 
index d9f7092..ead9501 100644 (file)
@@ -32,7 +32,7 @@
 static pval *npval(pvaltype type, int first_line, int last_line,
        int first_column, int last_column);
 
-static void linku1(pval *head, pval *tail);
+static pval * linku1(pval *head, pval *tail);
 
 void reset_parencount(yyscan_t yyscanner);
 void reset_semicount(yyscan_t yyscanner);
@@ -959,13 +959,16 @@ static struct pval *npval2(pvaltype type, YYLTYPE *first, YYLTYPE *last)
 }
 
 /* append second element to the list in the first one */
-static void linku1(pval *head, pval *tail)
+static pval * linku1(pval *head, pval *tail)
 {
+       if (!head)
+               return tail;
        if (!head->next) {
                head->next = tail;
        } else {
                head->u1_last->next = tail;
        }
        head->u1_last = tail;
+       return head;
 }
 
index 5d0b4e7..b1aa53f 100644 (file)
@@ -1309,7 +1309,7 @@ case 40:
 /* rule 40 can match eol */
 YY_RULE_SETUP
 #line 216 "ael.flex"
-{ my_lineno++; my_col = 0; }
+{ my_lineno++; my_col = 1; }
        YY_BREAK
 case 41:
 YY_RULE_SETUP
@@ -1319,7 +1319,7 @@ YY_RULE_SETUP
 case 42:
 YY_RULE_SETUP
 #line 218 "ael.flex"
-{ my_col += 8-(my_col%8); }
+{ my_col += (yyleng*8)-(my_col%8); }
        YY_BREAK
 case 43:
 YY_RULE_SETUP