|
97 | 97 | ForStatement,
|
98 | 98 | FunctionDeclaration,
|
99 | 99 | GotoStatement,
|
| 100 | + HaltCompilerStatement, |
100 | 101 | IfStatementNode,
|
101 | 102 | InlineHtml,
|
102 | 103 | InterfaceDeclaration,
|
@@ -615,6 +616,15 @@ private function parseStatementFn() {
|
615 | 616 |
|
616 | 617 | case TokenKind::UnsetKeyword:
|
617 | 618 | return $this->parseUnsetStatement($parentNode);
|
| 619 | + |
| 620 | + case TokenKind::HaltCompilerKeyword: |
| 621 | + if ($parentNode instanceof SourceFileNode) { |
| 622 | + return $this->parseHaltCompilerStatement($parentNode); |
| 623 | + } |
| 624 | + // __halt_compiler is a fatal compile error anywhere other than the top level. |
| 625 | + // It won't be seen elsewhere in other programs - warn about the token being unexpected. |
| 626 | + $this->advanceToken(); |
| 627 | + return new SkippedToken($token); |
618 | 628 | }
|
619 | 629 |
|
620 | 630 | $expressionStatement = new ExpressionStatement();
|
@@ -1141,6 +1151,9 @@ private function isStatementStart(Token $token) {
|
1141 | 1151 |
|
1142 | 1152 | // attributes
|
1143 | 1153 | case TokenKind::AttributeToken:
|
| 1154 | + |
| 1155 | + // __halt_compiler |
| 1156 | + case TokenKind::HaltCompilerKeyword: |
1144 | 1157 | return true;
|
1145 | 1158 |
|
1146 | 1159 | default:
|
@@ -2844,6 +2857,18 @@ private function parseUnsetStatement($parentNode) {
|
2844 | 2857 | return $unsetStatement;
|
2845 | 2858 | }
|
2846 | 2859 |
|
| 2860 | + 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; |
| 2870 | + } |
| 2871 | + |
2847 | 2872 | private function parseArrayCreationExpression($parentNode) {
|
2848 | 2873 | $arrayExpression = new ArrayCreationExpression();
|
2849 | 2874 | $arrayExpression->parent = $parentNode;
|
|
0 commit comments