This patch allows for nested 'C-style' comments, which can be useful especially while debugging.
<?php /* comments /* now /* nest */ */ /*/*/*/* */*/*/*/ */ ?> Since comments are handled purely lexical, there should be virtually no performance hit. The following two examples show how errors are handled: 1) <?php /* */ */ ?> 2) <?php /* /* */ ?> Ad 1) This will yield a zend_error(E_COMPILE_ERROR,"Invalid nesting of comments") on the last line. Unpatched, a parse error is the most likely result. Ad 2) A zend_error(E_COMPILE_WARNING, "unterminated comment starting line %d", CG(comment_start_line)) is raised. The attached patch is against latest CVS Best regards, Anders Johannsen -- [EMAIL PROTECTED] Index: zend_globals.h =================================================================== RCS file: /repository/Zend/zend_globals.h,v retrieving revision 1.80 diff -u -r1.80 zend_globals.h --- zend_globals.h 2001/10/23 01:19:16 1.80 +++ zend_globals.h 2001/11/27 10:08:06 @@ -82,6 +82,7 @@ int comment_start_line; char *heredoc; int heredoc_len; + unsigned int comment_nest_level; zend_op_array *active_op_array; Index: zend_language_scanner.l =================================================================== RCS file: /repository/Zend/zend_language_scanner.l,v retrieving revision 1.40 diff -u -r1.40 zend_language_scanner.l --- zend_language_scanner.l 2001/09/22 00:06:27 1.40 +++ zend_language_scanner.l 2001/11/27 10:08:07 @@ -1,5 +1,4 @@ %{ - /* +----------------------------------------------------------------------+ | Zend Engine | @@ -125,6 +124,7 @@ { CG(heredoc) = NULL; CG(heredoc_len)=0; + CG(comment_nest_level)=0; } @@ -1057,24 +1057,39 @@ } } +<ST_IN_SCRIPTING>"*/" { + zend_error(E_COMPILE_ERROR,"Invalid nesting of comments"); +} + <ST_IN_SCRIPTING>"/*" { CG(comment_start_line) = CG(zend_lineno); BEGIN(ST_COMMENT); + CG(comment_nest_level) = 1; yymore(); } - -<ST_COMMENT>[^*]+ { +<ST_COMMENT>[^/*]+ { yymore(); } +<ST_COMMENT>"/*" { + CG(comment_nest_level)++; + yymore(); +} + <ST_COMMENT>"*/" { - HANDLE_NEWLINES(yytext, yyleng); - BEGIN(ST_IN_SCRIPTING); - return T_COMMENT; + CG(comment_nest_level)--; + + if (CG(comment_nest_level) == 0) { + HANDLE_NEWLINES(yytext, yyleng); + BEGIN(ST_IN_SCRIPTING); + return T_COMMENT; + } else { + yymore(); + } } -<ST_COMMENT>"*" { +<ST_COMMENT>"*"|"/" { yymore(); } -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]