This commit is contained in:
Родитель
917b5e0862
Коммит
80d0cfe7f2
|
@ -1407,27 +1407,6 @@ class Parser {
|
|||
|
||||
private function parseExpressionFn() {
|
||||
return function ($parentNode) {
|
||||
$token = $this->getCurrentToken();
|
||||
switch ($token->kind) {
|
||||
// include-expression
|
||||
// include-once-expression
|
||||
// require-expression
|
||||
// require-once-expression
|
||||
case TokenKind::IncludeKeyword:
|
||||
case TokenKind::IncludeOnceKeyword:
|
||||
case TokenKind::RequireKeyword:
|
||||
case TokenKind::RequireOnceKeyword:
|
||||
$scriptInclusionExpression = new ScriptInclusionExpression();
|
||||
$scriptInclusionExpression->parent = $parentNode;
|
||||
$scriptInclusionExpression->requireOrIncludeKeyword =
|
||||
$this->eat(
|
||||
TokenKind::RequireKeyword, TokenKind::RequireOnceKeyword,
|
||||
TokenKind::IncludeKeyword, TokenKind::IncludeOnceKeyword
|
||||
);
|
||||
$scriptInclusionExpression->expression = $this->parseExpression($scriptInclusionExpression);
|
||||
return $scriptInclusionExpression;
|
||||
}
|
||||
|
||||
return $this->parseBinaryExpressionOrHigher(0, $parentNode);
|
||||
};
|
||||
}
|
||||
|
@ -1501,6 +1480,16 @@ class Parser {
|
|||
case TokenKind::YieldKeyword:
|
||||
case TokenKind::YieldFromKeyword:
|
||||
return $this->parseYieldExpression($parentNode);
|
||||
|
||||
// include-expression
|
||||
// include-once-expression
|
||||
// require-expression
|
||||
// require-once-expression
|
||||
case TokenKind::IncludeKeyword:
|
||||
case TokenKind::IncludeOnceKeyword:
|
||||
case TokenKind::RequireKeyword:
|
||||
case TokenKind::RequireOnceKeyword:
|
||||
return $this->parseScriptInclusionExpression($parentNode);
|
||||
}
|
||||
|
||||
$expression = $this->parsePrimaryExpression($parentNode);
|
||||
|
@ -1987,6 +1976,18 @@ class Parser {
|
|||
return $yieldExpression;
|
||||
}
|
||||
|
||||
private function parseScriptInclusionExpression($parentNode) {
|
||||
$scriptInclusionExpression = new ScriptInclusionExpression();
|
||||
$scriptInclusionExpression->parent = $parentNode;
|
||||
$scriptInclusionExpression->requireOrIncludeKeyword =
|
||||
$this->eat(
|
||||
TokenKind::RequireKeyword, TokenKind::RequireOnceKeyword,
|
||||
TokenKind::IncludeKeyword, TokenKind::IncludeOnceKeyword
|
||||
);
|
||||
$scriptInclusionExpression->expression = $this->parseExpression($scriptInclusionExpression);
|
||||
return $scriptInclusionExpression;
|
||||
}
|
||||
|
||||
private function parseEchoExpression($parentNode) {
|
||||
$echoExpression = new EchoExpression();
|
||||
$echoExpression->parent = $parentNode;
|
||||
|
|
|
@ -1,2 +1,84 @@
|
|||
<?php
|
||||
$b = require "c";
|
||||
{
|
||||
"SourceFileNode": {
|
||||
"statementList": [
|
||||
{
|
||||
"InlineHtml": {
|
||||
"scriptSectionEndTag": null,
|
||||
"text": null,
|
||||
"scriptSectionStartTag": {
|
||||
"kind": "ScriptSectionStartTag",
|
||||
"textLength": 6
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"ExpressionStatement": {
|
||||
"expression": {
|
||||
"AssignmentExpression": {
|
||||
"leftOperand": {
|
||||
"Variable": {
|
||||
"dollar": null,
|
||||
"name": {
|
||||
"kind": "VariableName",
|
||||
"textLength": 2
|
||||
}
|
||||
}
|
||||
},
|
||||
"operator": {
|
||||
"kind": "EqualsToken",
|
||||
"textLength": 1
|
||||
},
|
||||
"byRef": null,
|
||||
"rightOperand": {
|
||||
"ScriptInclusionExpression": {
|
||||
"requireOrIncludeKeyword": {
|
||||
"kind": "RequireKeyword",
|
||||
"textLength": 7
|
||||
},
|
||||
"expression": {
|
||||
"BinaryExpression": {
|
||||
"leftOperand": {
|
||||
"QualifiedName": {
|
||||
"globalSpecifier": null,
|
||||
"relativeSpecifier": null,
|
||||
"nameParts": [
|
||||
{
|
||||
"kind": "Name",
|
||||
"textLength": 8
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"operator": {
|
||||
"kind": "DotToken",
|
||||
"textLength": 1
|
||||
},
|
||||
"rightOperand": {
|
||||
"StringLiteral": {
|
||||
"startQuote": null,
|
||||
"children": {
|
||||
"kind": "StringLiteralToken",
|
||||
"textLength": 7
|
||||
},
|
||||
"endQuote": null
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"semicolon": {
|
||||
"kind": "SemicolonToken",
|
||||
"textLength": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"endOfFileToken": {
|
||||
"kind": "EndOfFileToken",
|
||||
"textLength": 0
|
||||
}
|
||||
}
|
||||
}
|
|
@ -16,7 +16,6 @@
|
|||
"foreachStatement11.php",
|
||||
"foreachStatement8.php",
|
||||
"globalVariableDeclarationStatement3.php",
|
||||
"inclusionExpression2.php",
|
||||
"interfaceDeclaration17.php",
|
||||
"interfaceDeclaration6.php",
|
||||
"listExpression17.php",
|
||||
|
|
Загрузка…
Ссылка в новой задаче