diff options
-rw-r--r-- | doc/src/sgml/ecpg.sgml | 6 | ||||
-rw-r--r-- | src/interfaces/ecpg/preproc/pgc.l | 8 |
2 files changed, 10 insertions, 4 deletions
diff --git a/doc/src/sgml/ecpg.sgml b/doc/src/sgml/ecpg.sgml index c629726affe..120d760ba21 100644 --- a/doc/src/sgml/ecpg.sgml +++ b/doc/src/sgml/ecpg.sgml @@ -64,8 +64,10 @@ EXEC SQL ...; These statements syntactically take the place of a C statement. Depending on the particular statement, they can appear at the global level or within a function. Embedded - <acronym>SQL</acronym> statements follow the case-sensitivity rules - of normal <acronym>SQL</acronym> code, and not those of C. + <acronym>SQL</acronym> statements follow the case-sensitivity rules of + normal <acronym>SQL</acronym> code, and not those of C. Also they allow nested + C-style comments that are part of the SQL standard. The C part of the + program, however, follows the C standard of not accepting nested comments. </para> <para> diff --git a/src/interfaces/ecpg/preproc/pgc.l b/src/interfaces/ecpg/preproc/pgc.l index 6deef59d53f..f04e34a53de 100644 --- a/src/interfaces/ecpg/preproc/pgc.l +++ b/src/interfaces/ecpg/preproc/pgc.l @@ -394,17 +394,20 @@ cppline {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})(.*\\{space})*. xcdepth++; /* Put back any characters past slash-star; see above */ yyless(2); - fputs("/*", yyout); + fputs("/_*", yyout); } <xcsql>{xcstop} { - ECHO; if (xcdepth <= 0) { + ECHO; BEGIN(state_before); token_start = NULL; } else + { xcdepth--; + fputs("*_/", yyout); + } } <xcc>{xcstop} { ECHO; @@ -861,6 +864,7 @@ cppline {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})(.*\\{space})*. } } } +<C>{xcstop} { mmerror(PARSE_ERROR, ET_ERROR, "nested /* ... */ comments"); } <C>":" { return(':'); } <C>";" { return(';'); } <C>"," { return(','); } |