|
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