Просмотр исходного кода

BUG: When an unquoted argument contains a pair of matching double quotes spaces and tabs should be allowed in-between. This allows arguments like -DFOO='"bar zot"' to work.

Brad King 20 лет назад
Родитель
Сommit
dbe997e63b
2 измененных файлов с 50 добавлено и 49 удалено
  1. 49 48
      Source/cmListFileLexer.c
  2. 1 1
      Source/cmListFileLexer.in.l

+ 49 - 48
Source/cmListFileLexer.c

@@ -374,19 +374,19 @@ static yyconst flex_int16_t yy_accept[39] =
 static yyconst flex_int32_t yy_ec[256] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
-        1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    2,    1,    4,    5,    6,    1,    1,    1,    7,
-        8,    1,    1,    1,    1,    1,    1,    9,    9,    9,
-        9,    9,    9,    9,    9,    9,    9,    1,    1,    1,
-        1,    1,    1,    1,   10,   10,   10,   10,   10,   10,
-       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
-       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
-        1,   11,    1,    1,   10,    1,   10,   10,   10,   10,
-
-       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
-       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
-       10,   10,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    2,    1,    5,    6,    7,    1,    1,    1,    8,
+        9,    1,    1,    1,    1,    1,    1,   10,   10,   10,
+       10,   10,   10,   10,   10,   10,   10,    1,    1,    1,
+        1,    1,    1,    1,   11,   11,   11,   11,   11,   11,
+       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
+       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
+        1,   12,    1,    1,   11,    1,   11,   11,   11,   11,
+
+       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
+       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
+       11,   11,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -403,19 +403,19 @@ static yyconst flex_int32_t yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[12] =
+static yyconst flex_int32_t yy_meta[13] =
     {   0,
-        1,    1,    2,    3,    1,    1,    1,    4,    4,    4,
-        1
+        1,    1,    2,    1,    3,    1,    1,    1,    4,    4,
+        4,    1
     } ;
 
 static yyconst flex_int16_t yy_base[48] =
     {   0,
-        0,    0,    9,   18,   34,   29,   82,   82,   82,    0,
-       25,   82,   82,   32,    0,   20,   82,   82,   40,    0,
-       44,   21,    0,    0,   19,    0,    0,   15,   53,    0,
-       18,    0,   16,   15,   11,   10,    9,   82,   57,   61,
-       65,   69,   73,   12,   77,   11,   10
+        0,    0,   10,   20,   34,   32,   89,   89,   89,    0,
+       23,   89,   89,   35,    0,   18,   89,   89,   44,    0,
+       49,   21,    0,    0,   19,    0,    0,   15,   59,    0,
+       18,    0,   15,   12,   11,   10,    9,   89,   64,   68,
+       72,   76,   80,   13,   84,   12,   10
     } ;
 
 static yyconst flex_int16_t yy_def[48] =
@@ -427,34 +427,36 @@ static yyconst flex_int16_t yy_def[48] =
        38,   38,   38,   38,   38,   38,   38
     } ;
 
-static yyconst flex_int16_t yy_nxt[94] =
+static yyconst flex_int16_t yy_nxt[102] =
     {   0,
-        6,    7,    8,    9,   10,   11,   12,   13,    6,   14,
-       15,   17,   18,   37,   36,   34,   30,   20,   30,   19,
-       17,   18,   27,   20,   35,   29,   27,   33,   19,   20,
-       29,   25,   21,   38,   22,   38,   38,   20,   20,   23,
-       26,   26,   28,   28,   30,   38,   38,   20,   38,   31,
-       38,   38,   30,   30,   32,   28,   28,   16,   16,   16,
-       16,   24,   38,   24,   24,   27,   38,   27,   27,   28,
-       38,   38,   28,   20,   38,   20,   20,   30,   38,   30,
-       30,    5,   38,   38,   38,   38,   38,   38,   38,   38,
-       38,   38,   38
-
+        6,    7,    8,    7,    9,   10,   11,   12,   13,    6,
+       14,   15,   17,   37,   18,   36,   34,   30,   20,   30,
+       27,   19,   17,   20,   18,   35,   29,   27,   33,   29,
+       25,   19,   20,   38,   38,   38,   21,   38,   22,   38,
+       38,   20,   20,   23,   26,   26,   28,   38,   28,   30,
+       30,   38,   38,   20,   38,   31,   38,   38,   30,   30,
+       32,   28,   38,   28,   16,   16,   16,   16,   24,   38,
+       24,   24,   27,   38,   27,   27,   28,   38,   38,   28,
+       20,   38,   20,   20,   30,   38,   30,   30,    5,   38,
+       38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
+
+       38
     } ;
 
-static yyconst flex_int16_t yy_chk[94] =
+static yyconst flex_int16_t yy_chk[102] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    3,    3,   47,   46,   44,   37,   36,   35,    3,
-        4,    4,   34,   33,   31,   28,   25,   22,    4,    6,
-       16,   11,    6,    5,    6,    0,    0,    6,    6,    6,
-       14,   14,   19,   19,   21,    0,    0,   21,    0,   21,
-        0,    0,   21,   21,   21,   29,   29,   39,   39,   39,
-       39,   40,    0,   40,   40,   41,    0,   41,   41,   42,
-        0,    0,   42,   43,    0,   43,   43,   45,    0,   45,
-       45,   38,   38,   38,   38,   38,   38,   38,   38,   38,
-       38,   38,   38
-
+        1,    1,    3,   47,    3,   46,   44,   37,   36,   35,
+       34,    3,    4,   33,    4,   31,   28,   25,   22,   16,
+       11,    4,    6,    5,    0,    0,    6,    0,    6,    0,
+        0,    6,    6,    6,   14,   14,   19,    0,   19,   21,
+       21,    0,    0,   21,    0,   21,    0,    0,   21,   21,
+       21,   29,    0,   29,   39,   39,   39,   39,   40,    0,
+       40,   40,   41,    0,   41,   41,   42,    0,    0,   42,
+       43,    0,   43,   43,   45,    0,   45,   45,   38,   38,
+       38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
+
+       38
     } ;
 
 /* Table of booleans, true if rule could match eol. */
@@ -560,7 +562,7 @@ static void cmListFileLexerDestroy(cmListFileLexer* lexer);
 
 /*--------------------------------------------------------------------------*/
 
-#line 566 "cmListFileLexer.c"
+#line 568 "cmListFileLexer.c"
 
 #define INITIAL 0
 #define STRING 1
@@ -777,7 +779,7 @@ YY_DECL
 #line 100 "cmListFileLexer.in.l"
 
 
-#line 785 "cmListFileLexer.c"
+#line 787 "cmListFileLexer.c"
 
         if ( yyg->yy_init )
                 {
@@ -836,7 +838,7 @@ yy_match:
                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                         ++yy_cp;
                         }
-                while ( yy_base[yy_current_state] != 82 );
+                while ( yy_base[yy_current_state] != 89 );
 
 yy_find_action:
                 yy_act = yy_accept[yy_current_state];
@@ -1006,7 +1008,7 @@ YY_RULE_SETUP
 #line 194 "cmListFileLexer.in.l"
 ECHO;
         YY_BREAK
-#line 1023 "cmListFileLexer.c"
+#line 1025 "cmListFileLexer.c"
 
         case YY_END_OF_BUFFER:
                 {
@@ -2338,4 +2340,3 @@ const char* cmListFileLexer_GetTypeAsString(cmListFileLexer* lexer,
     }
   return "unknown token";
 }
-

+ 1 - 1
Source/cmListFileLexer.in.l

@@ -132,7 +132,7 @@ MAKEVAR \$\([A-Za-z0-9_]*\)
   return 1;
 }
 
-({MAKEVAR}|[^ \t\r\n\(\)#\\\"]|\\.)({MAKEVAR}|[^ \t\r\n\(\)#\\\"]|\\.|\"({MAKEVAR}|[^ \t\r\n\(\)#\\\"]|\\.)*\")* {
+({MAKEVAR}|[^ \t\r\n\(\)#\\\"]|\\.)({MAKEVAR}|[^ \t\r\n\(\)#\\\"]|\\.|\"({MAKEVAR}|[^\r\n\(\)#\\\"]|\\.)*\")* {
   lexer->token.type = cmListFileLexer_Token_ArgumentUnquoted;
   cmListFileLexerSetToken(lexer, yytext, yyleng);
   lexer->column += yyleng;