[cmake-commits] king committed cmCommandArgumentLexer.cxx 1.12 1.13
cmCommandArgumentLexer.h 1.3 1.4 cmCommandArgumentLexer.in.l
1.8 1.9 cmCommandArgumentParserHelper.cxx 1.18 1.19
cmake-commits at cmake.org
cmake-commits at cmake.org
Mon Jun 4 15:57:36 EDT 2007
Update of /cvsroot/CMake/CMake/Source
In directory public:/mounts/ram/cvs-serv30486
Modified Files:
cmCommandArgumentLexer.cxx cmCommandArgumentLexer.h
cmCommandArgumentLexer.in.l cmCommandArgumentParserHelper.cxx
Log Message:
BUG: Fixed cmCommandArgumentLexer no-escape mode to not match backslash-escape sequences as lexical tokens at all. Needed to configure files with backslashes preceding an @VAR@ replacement. This fixes bug#5130.
Index: cmCommandArgumentLexer.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmCommandArgumentLexer.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- cmCommandArgumentLexer.h 25 Sep 2006 14:05:06 -0000 1.3
+++ cmCommandArgumentLexer.h 4 Jun 2007 19:57:33 -0000 1.4
@@ -2,10 +2,6 @@
#define cmCommandArgument_yyHEADER_H 1
#define cmCommandArgument_yyIN_HEADER 1
-
-
-
-
#define YY_INT_ALIGNED short int
/* A lexical scanner generated by flex */
@@ -35,7 +31,7 @@
/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
-#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+#if __STDC_VERSION__ >= 199901L
/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
* if you want the limit (max/min) macros for int types.
@@ -96,7 +92,7 @@
/* The "const" storage-class-modifier is valid. */
#define YY_USE_CONST
-#else /* ! __cplusplus */
+#else /* ! __cplusplus */
#if __STDC__
@@ -148,73 +144,65 @@
#ifndef YY_STRUCT_YY_BUFFER_STATE
#define YY_STRUCT_YY_BUFFER_STATE
struct yy_buffer_state
- {
- FILE *yy_input_file;
+ {
+ FILE *yy_input_file;
- char *yy_ch_buf; /* input buffer */
- char *yy_buf_pos; /* current position in input buffer */
+ char *yy_ch_buf; /* input buffer */
+ char *yy_buf_pos; /* current position in input buffer */
- /* Size of input buffer in bytes, not including room for EOB
- * characters.
- */
- yy_size_t yy_buf_size;
+ /* Size of input buffer in bytes, not including room for EOB
+ * characters.
+ */
+ yy_size_t yy_buf_size;
- /* Number of characters read into yy_ch_buf, not including EOB
- * characters.
- */
- int yy_n_chars;
+ /* Number of characters read into yy_ch_buf, not including EOB
+ * characters.
+ */
+ int yy_n_chars;
- /* Whether we "own" the buffer - i.e., we know we created it,
- * and can realloc() it to grow it, and should free() it to
- * delete it.
- */
- int yy_is_our_buffer;
+ /* Whether we "own" the buffer - i.e., we know we created it,
+ * and can realloc() it to grow it, and should free() it to
+ * delete it.
+ */
+ int yy_is_our_buffer;
- /* Whether this is an "interactive" input source; if so, and
- * if we're using stdio for input, then we want to use getc()
- * instead of fread(), to make sure we stop fetching input after
- * each newline.
- */
- int yy_is_interactive;
+ /* Whether this is an "interactive" input source; if so, and
+ * if we're using stdio for input, then we want to use getc()
+ * instead of fread(), to make sure we stop fetching input after
+ * each newline.
+ */
+ int yy_is_interactive;
- /* Whether we're considered to be at the beginning of a line.
- * If so, '^' rules will be active on the next match, otherwise
- * not.
- */
- int yy_at_bol;
+ /* Whether we're considered to be at the beginning of a line.
+ * If so, '^' rules will be active on the next match, otherwise
+ * not.
+ */
+ int yy_at_bol;
int yy_bs_lineno; /**< The line count. */
int yy_bs_column; /**< The column count. */
- /* Whether to try to fill the input buffer when we reach the
- * end of it.
- */
- int yy_fill_buffer;
+ /* Whether to try to fill the input buffer when we reach the
+ * end of it.
+ */
+ int yy_fill_buffer;
- int yy_buffer_status;
+ int yy_buffer_status;
- };
+ };
#endif /* !YY_STRUCT_YY_BUFFER_STATE */
void cmCommandArgument_yyrestart (FILE *input_file ,yyscan_t yyscanner );
-void cmCommandArgument_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,
- yyscan_t yyscanner );
-YY_BUFFER_STATE cmCommandArgument_yy_create_buffer (FILE *file,int size ,
- yyscan_t yyscanner );
-void cmCommandArgument_yy_delete_buffer (YY_BUFFER_STATE b ,
- yyscan_t yyscanner );
-void cmCommandArgument_yy_flush_buffer (YY_BUFFER_STATE b ,
- yyscan_t yyscanner );
-void cmCommandArgument_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,
- yyscan_t yyscanner );
+void cmCommandArgument_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
+YY_BUFFER_STATE cmCommandArgument_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner );
+void cmCommandArgument_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
+void cmCommandArgument_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
+void cmCommandArgument_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
void cmCommandArgument_yypop_buffer_state (yyscan_t yyscanner );
-YY_BUFFER_STATE cmCommandArgument_yy_scan_buffer (char *base,yy_size_t size ,
- yyscan_t yyscanner );
-YY_BUFFER_STATE cmCommandArgument_yy_scan_string (yyconst char *yy_str ,
- yyscan_t yyscanner );
-YY_BUFFER_STATE cmCommandArgument_yy_scan_bytes (yyconst char *bytes,int len ,
- yyscan_t yyscanner );
+YY_BUFFER_STATE cmCommandArgument_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
+YY_BUFFER_STATE cmCommandArgument_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
+YY_BUFFER_STATE cmCommandArgument_yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );
void *cmCommandArgument_yyalloc (yy_size_t ,yyscan_t yyscanner );
void *cmCommandArgument_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner );
@@ -229,6 +217,8 @@
#ifdef YY_HEADER_EXPORT_START_CONDITIONS
#define INITIAL 0
+#define ESCAPES 1
+#define NOESCAPES 2
#endif
@@ -247,8 +237,7 @@
YY_EXTRA_TYPE cmCommandArgument_yyget_extra (yyscan_t yyscanner );
-void cmCommandArgument_yyset_extra (YY_EXTRA_TYPE user_defined ,
- yyscan_t yyscanner );
+void cmCommandArgument_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
FILE *cmCommandArgument_yyget_in (yyscan_t yyscanner );
@@ -311,15 +300,13 @@
#define YY_DECL int cmCommandArgument_yylex (yyscan_t yyscanner)
#endif /* !YY_DECL */
-/* yy_get_previous_state - get the state just before
- the EOB char was reached */
+/* yy_get_previous_state - get the state just before the EOB char was reached */
#undef YY_NEW_FILE
#undef YY_FLUSH_BUFFER
#undef yy_set_bol
#undef yy_new_buffer
#undef yy_set_interactive
-#undef yytext_ptr
#undef YY_DO_BEFORE_ACTION
#ifdef YY_DECL_IS_OURS
@@ -327,8 +314,5 @@
#undef YY_DECL
#endif
-
-
-
#undef cmCommandArgument_yyIN_HEADER
#endif /* cmCommandArgument_yyHEADER_H */
Index: cmCommandArgumentLexer.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmCommandArgumentLexer.cxx,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- cmCommandArgumentLexer.cxx 25 Sep 2006 22:33:27 -0000 1.12
+++ cmCommandArgumentLexer.cxx 4 Jun 2007 19:57:33 -0000 1.13
@@ -1,5 +1,3 @@
-#include "cmStandardIncludes.h"
-
#line 2 "cmCommandArgumentLexer.cxx"
#line 4 "cmCommandArgumentLexer.cxx"
@@ -357,8 +355,8 @@
*yy_cp = '\0'; \
yyg->yy_c_buf_p = yy_cp;
-#define YY_NUM_RULES 12
-#define YY_END_OF_BUFFER 13
+#define YY_NUM_RULES 13
+#define YY_END_OF_BUFFER 14
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -366,10 +364,11 @@
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static yyconst flex_int16_t yy_accept[20] =
+static yyconst flex_int16_t yy_accept[26] =
{ 0,
- 0, 0, 13, 8, 9, 6, 5, 11, 10, 4,
- 8, 0, 3, 6, 0, 7, 1, 2, 0
+ 0, 0, 0, 0, 0, 0, 14, 8, 9, 6,
+ 5, 13, 10, 4, 11, 12, 8, 0, 3, 6,
+ 0, 7, 1, 2, 0
} ;
static yyconst flex_int32_t yy_ec[256] =
@@ -409,32 +408,34 @@
1, 2, 3, 1, 3, 3, 3, 3
} ;
-static yyconst flex_int16_t yy_base[22] =
+static yyconst flex_int16_t yy_base[28] =
{ 0,
- 0, 0, 20, 0, 5, 14, 7, 0, 21, 21,
- 0, 3, 21, 0, 9, 21, 21, 21, 21, 14,
- 16
+ 0, 0, 18, 17, 16, 15, 20, 0, 5, 14,
+ 7, 25, 25, 25, 0, 25, 0, 3, 25, 0,
+ 9, 25, 25, 25, 25, 14, 16
} ;
-static yyconst flex_int16_t yy_def[22] =
+static yyconst flex_int16_t yy_def[28] =
{ 0,
- 19, 1, 19, 20, 19, 20, 19, 21, 19, 19,
- 20, 5, 19, 6, 19, 19, 19, 19, 0, 19,
- 19
+ 25, 1, 1, 1, 1, 1, 25, 26, 25, 26,
+ 25, 25, 25, 25, 27, 25, 26, 9, 25, 10,
+ 25, 25, 25, 25, 0, 25, 25
} ;
-static yyconst flex_int16_t yy_nxt[30] =
+static yyconst flex_int16_t yy_nxt[34] =
{ 0,
- 4, 4, 5, 6, 7, 8, 9, 10, 12, 17,
- 15, 13, 15, 18, 11, 11, 16, 14, 16, 19,
- 3, 19, 19, 19, 19, 19, 19, 19, 19
+ 8, 8, 9, 10, 11, 12, 13, 14, 18, 23,
+ 21, 19, 21, 24, 17, 17, 22, 20, 22, 25,
+ 16, 16, 15, 15, 7, 25, 25, 25, 25, 25,
+ 25, 25, 25
} ;
-static yyconst flex_int16_t yy_chk[30] =
+static yyconst flex_int16_t yy_chk[34] =
{ 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 5, 12,
- 7, 5, 15, 15, 20, 20, 21, 6, 21, 3,
- 19, 19, 19, 19, 19, 19, 19, 19, 19
+ 1, 1, 1, 1, 1, 1, 1, 1, 9, 18,
+ 11, 9, 21, 21, 26, 26, 27, 10, 27, 7,
+ 6, 5, 4, 3, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25
} ;
/* The intent behind this definition is that it'll catch
@@ -498,9 +499,13 @@
#include "cmCommandArgumentParserTokens.h"
/*--------------------------------------------------------------------------*/
-#line 500 "cmCommandArgumentLexer.cxx"
+
+
+#line 505 "cmCommandArgumentLexer.cxx"
#define INITIAL 0
+#define ESCAPES 1
+#define NOESCAPES 2
#ifndef YY_NO_UNISTD_H
/* Special case for "unistd.h", since it is non-ANSI. We include it way
@@ -713,10 +718,10 @@
register int yy_act;
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-#line 60 "cmCommandArgumentLexer.in.l"
+#line 62 "cmCommandArgumentLexer.in.l"
-#line 720 "cmCommandArgumentLexer.cxx"
+#line 727 "cmCommandArgumentLexer.cxx"
if ( !yyg->yy_init )
{
@@ -769,13 +774,13 @@
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 20 )
+ if ( yy_current_state >= 26 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp;
}
- while ( yy_base[yy_current_state] != 21 );
+ while ( yy_base[yy_current_state] != 25 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
@@ -801,7 +806,7 @@
case 1:
YY_RULE_SETUP
-#line 62 "cmCommandArgumentLexer.in.l"
+#line 64 "cmCommandArgumentLexer.in.l"
{
//std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl;
yyextra->AllocateParserType(yylvalp, yytext+1, strlen(yytext)-2);
@@ -809,7 +814,7 @@
}
case 2:
YY_RULE_SETUP
-#line 68 "cmCommandArgumentLexer.in.l"
+#line 70 "cmCommandArgumentLexer.in.l"
{
//std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl;
yyextra->AllocateParserType(yylvalp, yytext+1, strlen(yytext)-2);
@@ -817,7 +822,7 @@
}
case 3:
YY_RULE_SETUP
-#line 74 "cmCommandArgumentLexer.in.l"
+#line 76 "cmCommandArgumentLexer.in.l"
{
//std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl;
//yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext));
@@ -826,7 +831,7 @@
}
case 4:
YY_RULE_SETUP
-#line 81 "cmCommandArgumentLexer.in.l"
+#line 83 "cmCommandArgumentLexer.in.l"
{
//std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl;
//yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext));
@@ -835,7 +840,7 @@
}
case 5:
YY_RULE_SETUP
-#line 88 "cmCommandArgumentLexer.in.l"
+#line 90 "cmCommandArgumentLexer.in.l"
{
//std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl;
//yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext));
@@ -844,7 +849,7 @@
}
case 6:
YY_RULE_SETUP
-#line 95 "cmCommandArgumentLexer.in.l"
+#line 97 "cmCommandArgumentLexer.in.l"
{
//std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl;
yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext));
@@ -852,7 +857,7 @@
}
case 7:
YY_RULE_SETUP
-#line 101 "cmCommandArgumentLexer.in.l"
+#line 103 "cmCommandArgumentLexer.in.l"
{
if ( !yyextra->HandleEscapeSymbol(yylvalp, *(yytext+1)) )
{
@@ -863,7 +868,7 @@
case 8:
/* rule 8 can match eol */
YY_RULE_SETUP
-#line 109 "cmCommandArgumentLexer.in.l"
+#line 111 "cmCommandArgumentLexer.in.l"
{
//std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl;
yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext));
@@ -871,7 +876,7 @@
}
case 9:
YY_RULE_SETUP
-#line 115 "cmCommandArgumentLexer.in.l"
+#line 117 "cmCommandArgumentLexer.in.l"
{
//yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext));
yylvalp->str = yyextra->DOLLARVariable;
@@ -879,7 +884,7 @@
}
case 10:
YY_RULE_SETUP
-#line 121 "cmCommandArgumentLexer.in.l"
+#line 123 "cmCommandArgumentLexer.in.l"
{
//yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext));
yylvalp->str = yyextra->LCURLYVariable;
@@ -887,7 +892,7 @@
}
case 11:
YY_RULE_SETUP
-#line 127 "cmCommandArgumentLexer.in.l"
+#line 129 "cmCommandArgumentLexer.in.l"
{
//yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext));
yylvalp->str = yyextra->BSLASHVariable;
@@ -895,11 +900,21 @@
}
case 12:
YY_RULE_SETUP
-#line 133 "cmCommandArgumentLexer.in.l"
+#line 135 "cmCommandArgumentLexer.in.l"
+{
+ //yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext));
+ yylvalp->str = yyextra->BSLASHVariable;
+ return cal_SYMBOL;
+}
+case 13:
+YY_RULE_SETUP
+#line 141 "cmCommandArgumentLexer.in.l"
ECHO;
YY_BREAK
-#line 913 "cmCommandArgumentLexer.cxx"
+#line 929 "cmCommandArgumentLexer.cxx"
case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(ESCAPES):
+case YY_STATE_EOF(NOESCAPES):
yyterminate();
case YY_END_OF_BUFFER:
@@ -1184,7 +1199,7 @@
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 20 )
+ if ( yy_current_state >= 26 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1213,11 +1228,11 @@
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 20 )
+ if ( yy_current_state >= 26 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- yy_is_jam = (yy_current_state == 19);
+ yy_is_jam = (yy_current_state == 25);
return yy_is_jam ? 0 : yy_current_state;
}
@@ -1967,7 +1982,22 @@
#define YYTABLES_NAME "yytables"
-#line 133 "cmCommandArgumentLexer.in.l"
+#line 141 "cmCommandArgumentLexer.in.l"
+/*--------------------------------------------------------------------------*/
+void cmCommandArgument_SetupEscapes(yyscan_t yyscanner, bool noEscapes)
+{
+ /* Hack into the internal flex-generated scanner to set the state. */
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ if(noEscapes)
+ {
+ BEGIN(NOESCAPES);
+ }
+ else
+ {
+ BEGIN(ESCAPES);
+ }
+}
+
Index: cmCommandArgumentLexer.in.l
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmCommandArgumentLexer.in.l,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- cmCommandArgumentLexer.in.l 25 Sep 2006 14:05:06 -0000 1.8
+++ cmCommandArgumentLexer.in.l 4 Jun 2007 19:57:33 -0000 1.9
@@ -56,6 +56,8 @@
%option reentrant
%option noyywrap
%pointer
+%s ESCAPES
+%s NOESCAPES
%%
@@ -98,7 +100,7 @@
return cal_NAME;
}
-\\. {
+<ESCAPES>\\. {
if ( !yyextra->HandleEscapeSymbol(yylvalp, *(yytext+1)) )
{
return cal_ERROR;
@@ -124,10 +126,31 @@
return cal_LCURLY;
}
-"\\" {
+<ESCAPES>"\\" {
//yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext));
yylvalp->str = yyextra->BSLASHVariable;
return cal_BSLASH;
}
+<NOESCAPES>"\\" {
+ //yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext));
+ yylvalp->str = yyextra->BSLASHVariable;
+ return cal_SYMBOL;
+}
+
%%
+
+/*--------------------------------------------------------------------------*/
+void cmCommandArgument_SetupEscapes(yyscan_t yyscanner, bool noEscapes)
+{
+ /* Hack into the internal flex-generated scanner to set the state. */
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ if(noEscapes)
+ {
+ BEGIN(NOESCAPES);
+ }
+ else
+ {
+ BEGIN(ESCAPES);
+ }
+}
Index: cmCommandArgumentParserHelper.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmCommandArgumentParserHelper.cxx,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- cmCommandArgumentParserHelper.cxx 9 Feb 2007 18:44:37 -0000 1.18
+++ cmCommandArgumentParserHelper.cxx 4 Jun 2007 19:57:33 -0000 1.19
@@ -213,15 +213,6 @@
bool cmCommandArgumentParserHelper::HandleEscapeSymbol
(cmCommandArgumentParserHelper::ParserType* pt, char symbol)
{
- if ( this->NoEscapeMode )
- {
- char buffer[3];
- buffer[0] = '\\';
- buffer[1] = symbol;
- buffer[2] = 0;
- this->AllocateParserType(pt, buffer, 2);
- return true;
- }
switch ( symbol )
{
case '\\':
@@ -260,6 +251,8 @@
return true;
}
+void cmCommandArgument_SetupEscapes(yyscan_t yyscanner, bool noEscapes);
+
int cmCommandArgumentParserHelper::ParseString(const char* str, int verb)
{
if ( !str)
@@ -276,6 +269,7 @@
yyscan_t yyscanner;
cmCommandArgument_yylex_init(&yyscanner);
cmCommandArgument_yyset_extra(this, yyscanner);
+ cmCommandArgument_SetupEscapes(yyscanner, this->NoEscapeMode);
int res = cmCommandArgument_yyparse(yyscanner);
cmCommandArgument_yylex_destroy(yyscanner);
if ( res != 0 )
More information about the Cmake-commits
mailing list