@@ -2858,15 +2858,27 @@ private function parseUnsetStatement($parentNode) {
28582858 }
28592859
28602860 private function parseHaltCompilerStatement ($ parentNode ) {
2861- $ unsetStatement = new HaltCompilerStatement ();
2862- $ unsetStatement ->parent = $ parentNode ;
2863-
2864- $ unsetStatement ->haltCompilerKeyword = $ this ->eat1 (TokenKind::HaltCompilerKeyword);
2865- $ unsetStatement ->openParen = $ this ->eat1 (TokenKind::OpenParenToken);
2866- $ unsetStatement ->closeParen = $ this ->eat1 (TokenKind::CloseParenToken);
2867- $ unsetStatement ->semicolon = $ this ->eatSemicolonOrAbortStatement ();
2868- $ unsetStatement ->data = $ this ->eatOptional1 (TokenKind::InlineHtml);
2869- return $ unsetStatement ;
2861+ $ haltCompilerStatement = new HaltCompilerStatement ();
2862+ $ haltCompilerStatement ->parent = $ parentNode ;
2863+
2864+ $ haltCompilerStatement ->haltCompilerKeyword = $ this ->eat1 (TokenKind::HaltCompilerKeyword);
2865+ $ haltCompilerStatement ->openParen = $ this ->eat1 (TokenKind::OpenParenToken);
2866+ $ haltCompilerStatement ->closeParen = $ this ->eat1 (TokenKind::CloseParenToken);
2867+ // There is an implicit ';' before the closing php tag.
2868+ $ haltCompilerStatement ->semicolonOrCloseTag = $ this ->eat (TokenKind::SemicolonToken, TokenKind::ScriptSectionEndTag);
2869+ // token_get_all() will return up to 3 tokens after __halt_compiler regardless of whether they're the right ones.
2870+ // For invalid php snippets, combine the remaining tokens into InlineHtml
2871+ $ remainingTokens = [];
2872+ while ($ this ->token ->kind !== TokenKind::EndOfFileToken) {
2873+ $ remainingTokens [] = $ this ->token ;
2874+ $ this ->advanceToken ();
2875+ }
2876+ if ($ remainingTokens ) {
2877+ $ firstToken = $ remainingTokens [0 ];
2878+ $ lastToken = end ($ remainingTokens );
2879+ $ haltCompilerStatement ->data = new Token (TokenKind::InlineHtml, $ firstToken ->fullStart , $ firstToken ->fullStart , $ lastToken ->fullStart + $ lastToken ->length - $ firstToken ->fullStart );
2880+ }
2881+ return $ haltCompilerStatement ;
28702882 }
28712883
28722884 private function parseArrayCreationExpression ($ parentNode ) {
0 commit comments