summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Pena <felipe@php.net>2010-07-10 16:57:50 +0000
committerFelipe Pena <felipe@php.net>2010-07-10 16:57:50 +0000
commit67055d0af8106203880c198b061e17fe396bcbc9 (patch)
tree239c0a8d3adefb1dbf42fe9da3ca6ec50b9be99d
parente1f175e576a90b44ce3528d07d0087c3019edf6e (diff)
downloadphp-git-67055d0af8106203880c198b061e17fe396bcbc9.tar.gz
- Workaround for YYACCEPT on __halt_compiler()
-rw-r--r--Zend/zend_compile.c8
-rw-r--r--Zend/zend_language_parser.y2
2 files changed, 8 insertions, 2 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 18cf11584a..925277ef9b 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -6103,7 +6103,7 @@ int zend_register_auto_global(const char *name, uint name_len, zend_auto_global_
int zendparse(TSRMLS_D) /* {{{ */
{
- int token;
+ int token, halting = 0;
void *pParser;
if ((pParser = ParseAlloc(malloc)) == NULL) {
@@ -6133,6 +6133,9 @@ again:
case T_OPEN_TAG:
case T_WHITESPACE:
goto again;
+ case T_HALT_COMPILER:
+ halting = 1;
+ break;
case T_END_HEREDOC:
efree(Z_STRVAL(zendlval.u.constant));
break;
@@ -6153,6 +6156,9 @@ again:
Parse(pParser, token, zendlval TSRMLS_CC);
if (token == 0) {
break;
+ } else if (halting == 1 && token == T_SEMICOLON) {
+ Parse(pParser, 0, zendlval TSRMLS_CC);
+ break;
}
}
ParseFree(pParser, free);
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
index 15c44fd107..a5c6f82f31 100644
--- a/Zend/zend_language_parser.y
+++ b/Zend/zend_language_parser.y
@@ -186,7 +186,7 @@ namespace_start ::= NAMESPACE LBRACE. { zend_do_begin_namespace(NULL, 1 TSRMLS_C
top_statement ::= statement. { zend_verify_namespace(TSRMLS_C); }
top_statement ::= function_declaration_statement. { zend_verify_namespace(TSRMLS_C); zend_do_early_binding(TSRMLS_C); }
top_statement ::= class_declaration_statement. { zend_verify_namespace(TSRMLS_C); zend_do_early_binding(TSRMLS_C); }
-top_statement ::= HALT_COMPILER LPAREN RPAREN SEMICOLON. { zend_do_halt_compiler_register(TSRMLS_C); /* YYACCEPT; */ }
+top_statement ::= HALT_COMPILER LPAREN RPAREN SEMICOLON. { zend_do_halt_compiler_register(TSRMLS_C); }
top_statement ::= NAMESPACE namespace_name(B) SEMICOLON. { zend_do_begin_namespace(&B, 0 TSRMLS_CC); }
top_statement ::= NAMESPACE namespace_name(B) LBRACE. { zend_do_begin_namespace(&B, 1 TSRMLS_CC); }
top_statement ::= top_statement_list RBRACE. { zend_do_end_namespace(TSRMLS_C); }