This commit is contained in:
Rob Lourens 2017-06-12 17:08:39 -07:00
Родитель 917b5e0862
Коммит 80d0cfe7f2
3 изменённых файлов: 106 добавлений и 24 удалений

Просмотреть файл

@ -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",