Fix #97 - add questionToken for parsing nullable types, update test baseline

This commit is contained in:
Rob Lourens 2017-06-12 18:34:14 -07:00
Родитель 96fca7638f
Коммит 2cc3701de5
95 изменённых файлов: 447 добавлений и 21 удалений

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

@ -35,6 +35,7 @@ class AnonymousFunctionCreationExpression extends Expression {
// FunctionReturnType
'colonToken',
'questionToken',
'returnType',
// FunctionBody

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

@ -11,6 +11,8 @@ use Microsoft\PhpParser\Token;
trait FunctionReturnType {
/** @var Token */
public $colonToken;
/** @var Token|null */
public $questionToken;
/** @var Token | QualifiedName */
public $returnType;
}

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

@ -29,6 +29,7 @@ class MethodDeclaration extends Node {
// FunctionReturnType
'colonToken',
'questionToken',
'returnType',
// FunctionBody

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

@ -10,23 +10,23 @@ use Microsoft\PhpParser\Node;
use Microsoft\PhpParser\Token;
class Parameter extends Node {
/** @var Token|null */
public $questionToken;
/** @var QualifiedName | Token | null */
public $typeDeclaration;
/** @var Token | null */
public $byRefToken;
/** @var Token | null */
public $dotDotDotToken;
/** @var Token */
public $variableName;
/** @var Token | null */
public $equalsToken;
/** @var null | Expression */
public $default;
const CHILD_NAMES = [
'questionToken',
'typeDeclaration',
'byRefToken',
'dotDotDotToken',

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

@ -28,6 +28,7 @@ class FunctionDeclaration extends StatementNode implements NamespacedNameInterfa
// FunctionReturnType
'colonToken',
'questionToken',
'returnType',
// FunctionBody

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

@ -598,6 +598,7 @@ class Parser {
return function ($parentNode) {
$parameter = new Parameter();
$parameter->parent = $parentNode;
$parameter->questionToken = $this->eatOptional(TokenKind::QuestionToken);
$parameter->typeDeclaration = $this->tryParseParameterTypeDeclaration($parameter);
$parameter->byRefToken = $this->eatOptional(TokenKind::AmpersandToken);
// TODO add post-parse rule that prevents assignment
@ -1086,6 +1087,10 @@ class Parser {
case TokenKind::VariableName:
return true;
// nullable-type
case TokenKind::QuestionToken:
return true;
}
// scalar-type
@ -1195,45 +1200,46 @@ class Parser {
return null;
}
private function parseFunctionType(Node $functionDefinition, $canBeAbstract = false, $isAnonymous = false) {
$functionDefinition->functionKeyword = $this->eat(TokenKind::FunctionKeyword);
$functionDefinition->byRefToken = $this->eatOptional(TokenKind::AmpersandToken);
$functionDefinition->name = $isAnonymous
private function parseFunctionType(Node $functionDeclaration, $canBeAbstract = false, $isAnonymous = false) {
$functionDeclaration->functionKeyword = $this->eat(TokenKind::FunctionKeyword);
$functionDeclaration->byRefToken = $this->eatOptional(TokenKind::AmpersandToken);
$functionDeclaration->name = $isAnonymous
? $this->eatOptional($this->nameOrKeywordOrReservedWordTokens)
: $this->eat($this->nameOrKeywordOrReservedWordTokens);
if (isset($functionDefinition->name)) {
$functionDefinition->name->kind = TokenKind::Name;
if (isset($functionDeclaration->name)) {
$functionDeclaration->name->kind = TokenKind::Name;
}
if ($isAnonymous && isset($functionDefinition->name)) {
if ($isAnonymous && isset($functionDeclaration->name)) {
// Anonymous functions should not have names
$functionDefinition->name = new SkippedToken($functionDefinition->name); // TODO instaed handle this during post-walk
$functionDeclaration->name = new SkippedToken($functionDeclaration->name); // TODO instaed handle this during post-walk
}
$functionDefinition->openParen = $this->eat(TokenKind::OpenParenToken);
$functionDefinition->parameters = $this->parseDelimitedList(
$functionDeclaration->openParen = $this->eat(TokenKind::OpenParenToken);
$functionDeclaration->parameters = $this->parseDelimitedList(
DelimitedList\ParameterDeclarationList::class,
TokenKind::CommaToken,
$this->isParameterStartFn(),
$this->parseParameterFn(),
$functionDefinition);
$functionDefinition->closeParen = $this->eat(TokenKind::CloseParenToken);
$functionDeclaration);
$functionDeclaration->closeParen = $this->eat(TokenKind::CloseParenToken);
if ($isAnonymous) {
$functionDefinition->anonymousFunctionUseClause = $this->parseAnonymousFunctionUseClause($functionDefinition);
$functionDeclaration->anonymousFunctionUseClause = $this->parseAnonymousFunctionUseClause($functionDeclaration);
}
if ($this->checkToken(TokenKind::ColonToken)) {
$functionDefinition->colonToken = $this->eat(TokenKind::ColonToken);
$functionDefinition->returnType = $this->parseReturnTypeDeclaration($functionDefinition);
$functionDeclaration->colonToken = $this->eat(TokenKind::ColonToken);
$functionDeclaration->questionToken = $this->eatOptional(TokenKind::QuestionToken);
$functionDeclaration->returnType = $this->parseReturnTypeDeclaration($functionDeclaration);
}
if ($canBeAbstract) {
$functionDefinition->compoundStatementOrSemicolon = $this->eatOptional(TokenKind::SemicolonToken);
$functionDeclaration->compoundStatementOrSemicolon = $this->eatOptional(TokenKind::SemicolonToken);
}
if (!isset($functionDefinition->compoundStatementOrSemicolon)) {
$functionDefinition->compoundStatementOrSemicolon = $this->parseCompoundStatement($functionDefinition);
if (!isset($functionDeclaration->compoundStatementOrSemicolon)) {
$functionDeclaration->compoundStatementOrSemicolon = $this->parseCompoundStatement($functionDeclaration);
}
}

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

@ -65,6 +65,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"kind": "SemicolonToken",

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

@ -62,6 +62,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"kind": "SemicolonToken",

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

@ -65,6 +65,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -64,6 +64,7 @@
"kind": "ColonToken",
"textLength": 1
},
"questionToken": null,
"returnType": {
"kind": "BoolReservedWord",
"textLength": 4

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

@ -69,6 +69,7 @@
"kind": "ColonToken",
"textLength": 1
},
"questionToken": null,
"returnType": {
"kind": "BoolReservedWord",
"textLength": 4

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

@ -61,6 +61,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -39,6 +39,7 @@
},
"anonymousFunctionUseClause": null,
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -82,6 +82,7 @@
"kind": "ColonToken",
"textLength": 1
},
"questionToken": null,
"returnType": {
"kind": "VoidReservedWord",
"textLength": 4

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

@ -36,6 +36,7 @@
},
"anonymousFunctionUseClause": null,
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -33,6 +33,7 @@
},
"anonymousFunctionUseClause": null,
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -40,6 +40,7 @@
},
"anonymousFunctionUseClause": null,
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -53,6 +53,7 @@
},
"anonymousFunctionUseClause": null,
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -53,6 +53,7 @@
},
"anonymousFunctionUseClause": null,
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -92,6 +92,7 @@
}
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -62,6 +62,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -57,6 +57,7 @@
"children": [
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -74,6 +75,7 @@
},
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -93,6 +95,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -57,6 +57,7 @@
"children": [
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -74,6 +75,7 @@
},
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -96,6 +98,7 @@
"kind": "ColonToken",
"textLength": 1
},
"questionToken": null,
"returnType": {
"kind": "IntReservedWord",
"textLength": 3

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

@ -58,6 +58,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {
@ -102,6 +103,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -61,6 +61,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -31,6 +31,7 @@
"children": [
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -48,6 +49,7 @@
},
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": {
"kind": "AmpersandToken",
@ -73,6 +75,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -31,6 +31,7 @@
"children": [
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -48,6 +49,7 @@
},
{
"Parameter": {
"questionToken": null,
"typeDeclaration": {
"QualifiedName": {
"globalSpecifier": null,
@ -84,6 +86,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -31,6 +31,7 @@
"children": [
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -48,6 +49,7 @@
},
{
"Parameter": {
"questionToken": null,
"typeDeclaration": {
"QualifiedName": {
"globalSpecifier": null,
@ -81,6 +83,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -31,6 +31,7 @@
"children": [
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -48,6 +49,7 @@
},
{
"Parameter": {
"questionToken": null,
"typeDeclaration": {
"QualifiedName": {
"globalSpecifier": null,
@ -85,6 +87,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -31,6 +31,7 @@
"children": [
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -48,6 +49,7 @@
},
{
"Parameter": {
"questionToken": null,
"typeDeclaration": {
"QualifiedName": {
"globalSpecifier": null,
@ -79,6 +81,7 @@
},
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -98,6 +101,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -31,6 +31,7 @@
"children": [
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -48,6 +49,7 @@
},
{
"Parameter": {
"questionToken": null,
"typeDeclaration": {
"QualifiedName": {
"globalSpecifier": null,
@ -79,6 +81,7 @@
},
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": {
@ -101,6 +104,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -31,6 +31,7 @@
"children": [
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -50,6 +51,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -0,0 +1,5 @@
<?php
function b(?MyClass $x, ?int $y): int {
return 1;
}

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

@ -0,0 +1,142 @@
{
"SourceFileNode": {
"statementList": [
{
"InlineHtml": {
"scriptSectionEndTag": null,
"text": null,
"scriptSectionStartTag": {
"kind": "ScriptSectionStartTag",
"textLength": 6
}
}
},
{
"FunctionDeclaration": {
"functionKeyword": {
"kind": "FunctionKeyword",
"textLength": 8
},
"byRefToken": null,
"name": {
"kind": "Name",
"textLength": 1
},
"openParen": {
"kind": "OpenParenToken",
"textLength": 1
},
"parameters": {
"ParameterDeclarationList": {
"children": [
{
"Parameter": {
"questionToken": {
"kind": "QuestionToken",
"textLength": 1
},
"typeDeclaration": {
"QualifiedName": {
"globalSpecifier": null,
"relativeSpecifier": null,
"nameParts": [
{
"kind": "Name",
"textLength": 7
}
]
}
},
"byRefToken": null,
"dotDotDotToken": null,
"variableName": {
"kind": "VariableName",
"textLength": 2
},
"equalsToken": null,
"default": null
}
},
{
"kind": "CommaToken",
"textLength": 1
},
{
"Parameter": {
"questionToken": {
"kind": "QuestionToken",
"textLength": 1
},
"typeDeclaration": {
"kind": "IntReservedWord",
"textLength": 3
},
"byRefToken": null,
"dotDotDotToken": null,
"variableName": {
"kind": "VariableName",
"textLength": 2
},
"equalsToken": null,
"default": null
}
}
]
}
},
"closeParen": {
"kind": "CloseParenToken",
"textLength": 1
},
"colonToken": {
"kind": "ColonToken",
"textLength": 1
},
"questionToken": null,
"returnType": {
"kind": "IntReservedWord",
"textLength": 3
},
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {
"openBrace": {
"kind": "OpenBraceToken",
"textLength": 1
},
"statements": [
{
"ReturnStatement": {
"returnKeyword": {
"kind": "ReturnKeyword",
"textLength": 6
},
"expression": {
"NumericLiteral": {
"children": {
"kind": "IntegerLiteralToken",
"textLength": 1
}
}
},
"semicolon": {
"kind": "SemicolonToken",
"textLength": 1
}
}
}
],
"closeBrace": {
"kind": "CloseBraceToken",
"textLength": 1
}
}
}
}
}
],
"endOfFileToken": {
"kind": "EndOfFileToken",
"textLength": 0
}
}
}

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

@ -0,0 +1,5 @@
<?php
function b(MyClass $x, int $y): ?int {
return null;
}

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

@ -0,0 +1,139 @@
{
"SourceFileNode": {
"statementList": [
{
"InlineHtml": {
"scriptSectionEndTag": null,
"text": null,
"scriptSectionStartTag": {
"kind": "ScriptSectionStartTag",
"textLength": 6
}
}
},
{
"FunctionDeclaration": {
"functionKeyword": {
"kind": "FunctionKeyword",
"textLength": 8
},
"byRefToken": null,
"name": {
"kind": "Name",
"textLength": 1
},
"openParen": {
"kind": "OpenParenToken",
"textLength": 1
},
"parameters": {
"ParameterDeclarationList": {
"children": [
{
"Parameter": {
"questionToken": null,
"typeDeclaration": {
"QualifiedName": {
"globalSpecifier": null,
"relativeSpecifier": null,
"nameParts": [
{
"kind": "Name",
"textLength": 7
}
]
}
},
"byRefToken": null,
"dotDotDotToken": null,
"variableName": {
"kind": "VariableName",
"textLength": 2
},
"equalsToken": null,
"default": null
}
},
{
"kind": "CommaToken",
"textLength": 1
},
{
"Parameter": {
"questionToken": null,
"typeDeclaration": {
"kind": "IntReservedWord",
"textLength": 3
},
"byRefToken": null,
"dotDotDotToken": null,
"variableName": {
"kind": "VariableName",
"textLength": 2
},
"equalsToken": null,
"default": null
}
}
]
}
},
"closeParen": {
"kind": "CloseParenToken",
"textLength": 1
},
"colonToken": {
"kind": "ColonToken",
"textLength": 1
},
"questionToken": {
"kind": "QuestionToken",
"textLength": 1
},
"returnType": {
"kind": "IntReservedWord",
"textLength": 3
},
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {
"openBrace": {
"kind": "OpenBraceToken",
"textLength": 1
},
"statements": [
{
"ReturnStatement": {
"returnKeyword": {
"kind": "ReturnKeyword",
"textLength": 6
},
"expression": {
"ReservedWord": {
"children": {
"kind": "NullReservedWord",
"textLength": 4
}
}
},
"semicolon": {
"kind": "SemicolonToken",
"textLength": 1
}
}
}
],
"closeBrace": {
"kind": "CloseBraceToken",
"textLength": 1
}
}
}
}
}
],
"endOfFileToken": {
"kind": "EndOfFileToken",
"textLength": 0
}
}
}

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

@ -35,6 +35,7 @@
"kind": "ColonToken",
"textLength": 1
},
"questionToken": null,
"returnType": {
"kind": "IntReservedWord",
"textLength": 3

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

@ -31,6 +31,7 @@
"children": [
{
"Parameter": {
"questionToken": null,
"typeDeclaration": {
"QualifiedName": {
"globalSpecifier": null,
@ -59,6 +60,7 @@
},
{
"Parameter": {
"questionToken": null,
"typeDeclaration": {
"kind": "IntReservedWord",
"textLength": 3
@ -84,6 +86,7 @@
"kind": "ColonToken",
"textLength": 1
},
"questionToken": null,
"returnType": {
"kind": "IntReservedWord",
"textLength": 3

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -31,6 +31,7 @@
"children": [
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -59,6 +60,7 @@
},
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -78,6 +80,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -31,6 +31,7 @@
"children": [
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -55,6 +56,7 @@
},
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -74,6 +76,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -31,6 +31,7 @@
"children": [
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -48,6 +49,7 @@
},
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -70,6 +72,7 @@
"kind": "ColonToken",
"textLength": 1
},
"questionToken": null,
"returnType": {
"error": "MissingToken",
"kind": "ReturnType",

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

@ -31,6 +31,7 @@
"children": [
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -48,6 +49,7 @@
},
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": {
@ -70,6 +72,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -55,6 +55,7 @@
"children": [
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -72,6 +73,7 @@
},
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -104,6 +106,7 @@
"kind": "ColonToken",
"textLength": 1
},
"questionToken": null,
"returnType": {
"kind": "BoolReservedWord",
"textLength": 4

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

@ -56,6 +56,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"kind": "SemicolonToken",
@ -90,6 +91,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"kind": "SemicolonToken",

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

@ -56,6 +56,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {
@ -101,6 +102,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -60,6 +60,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"kind": "SemicolonToken",

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

@ -56,6 +56,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -56,6 +56,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"kind": "SemicolonToken",

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

@ -55,6 +55,7 @@
"children": [
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -72,6 +73,7 @@
},
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -91,6 +93,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"kind": "SemicolonToken",

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

@ -55,6 +55,7 @@
"children": [
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -72,6 +73,7 @@
},
{
"Parameter": {
"questionToken": null,
"typeDeclaration": null,
"byRefToken": null,
"dotDotDotToken": null,
@ -101,6 +103,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"kind": "SemicolonToken",

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

@ -56,6 +56,7 @@
"kind": "ColonToken",
"textLength": 1
},
"questionToken": null,
"returnType": {
"QualifiedName": {
"globalSpecifier": {

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

@ -56,6 +56,7 @@
"kind": "ColonToken",
"textLength": 1
},
"questionToken": null,
"returnType": {
"QualifiedName": {
"globalSpecifier": null,

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

@ -56,6 +56,7 @@
"kind": "ColonToken",
"textLength": 1
},
"questionToken": null,
"returnType": {
"QualifiedName": {
"globalSpecifier": null,

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

@ -56,6 +56,7 @@
"kind": "ColonToken",
"textLength": 1
},
"questionToken": null,
"returnType": {
"QualifiedName": {
"globalSpecifier": null,

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

@ -68,6 +68,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -105,6 +105,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -86,6 +86,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -73,6 +73,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -58,6 +58,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {
@ -176,6 +177,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {

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

@ -32,6 +32,7 @@
"textLength": 1
},
"colonToken": null,
"questionToken": null,
"returnType": null,
"compoundStatementOrSemicolon": {
"CompoundStatementNode": {