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]