summaryrefslogtreecommitdiff
path: root/Zend/zend_language_scanner.l
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/zend_language_scanner.l')
-rw-r--r--Zend/zend_language_scanner.l28
1 files changed, 25 insertions, 3 deletions
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index 7d966fb996..e84874c004 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -41,6 +41,7 @@
%x ST_LOOKING_FOR_PROPERTY
%x ST_LOOKING_FOR_VARNAME
%x ST_COMMENT
+%x ST_DOC_COMMENT
%x ST_ONE_LINE_COMMENT
%option stack
@@ -134,6 +135,10 @@ void shutdown_scanner(TSRMLS_D)
efree(CG(heredoc));
CG(heredoc_len)=0;
}
+ if (CG(doc_comment)) {
+ efree(CG(doc_comment));
+ CG(doc_comment_len) = 0;
+ }
}
END_EXTERN_C()
@@ -1169,6 +1174,12 @@ NAMESPACE_NAME ({LABEL}":")+{LABEL}
}
}
+<ST_IN_SCRIPTING>"/** "{NEWLINE} {
+ CG(comment_start_line) = CG(zend_lineno);
+ BEGIN(ST_DOC_COMMENT);
+ yymore();
+}
+
<ST_IN_SCRIPTING>"/*" {
CG(comment_start_line) = CG(zend_lineno);
BEGIN(ST_COMMENT);
@@ -1176,17 +1187,28 @@ NAMESPACE_NAME ({LABEL}":")+{LABEL}
}
-<ST_COMMENT>[^*]+ {
+<ST_COMMENT,ST_DOC_COMMENT>[^*]+ {
yymore();
}
+<ST_DOC_COMMENT>"*/" {
+ if (CG(doc_comment)) {
+ efree(CG(doc_comment));
+ }
+ CG(doc_comment) = estrndup(yytext, yyleng);
+ CG(doc_comment_len) = yyleng;
+ HANDLE_NEWLINES(yytext, yyleng);
+ BEGIN(ST_IN_SCRIPTING);
+ return T_DOC_COMMENT;
+}
+
<ST_COMMENT>"*/" {
HANDLE_NEWLINES(yytext, yyleng);
BEGIN(ST_IN_SCRIPTING);
return T_COMMENT;
}
-<ST_COMMENT>"*" {
+<ST_COMMENT,ST_DOC_COMMENT>"*" {
yymore();
}
@@ -1552,7 +1574,7 @@ NAMESPACE_NAME ({LABEL}":")+{LABEL}
return 0;
}
-<ST_COMMENT><<EOF>> {
+<ST_COMMENT,ST_DOC_COMMENT><<EOF>> {
zend_error(E_COMPILE_WARNING,"Unterminated comment starting line %d", CG(comment_start_line));
return 0;
}