Add BlockStatement
This commit is contained in:
parent
188dca85d8
commit
d613ea3f12
@ -70,7 +70,7 @@ namespace Parser.Binding
|
||||
private BoundIfStatement BindIfStatement(IfStatementSyntaxNode node)
|
||||
{
|
||||
var condition = BindExpression(node.Condition);
|
||||
var body = BindStatementList(node.Body);
|
||||
var body = BindBlockStatement(node.Body);
|
||||
var elseIfClauses = node.ElseifClauses
|
||||
.Where(n => n.IsNode)
|
||||
.Select(n => (ElseifClause)n.AsNode()!);
|
||||
@ -91,10 +91,16 @@ namespace Parser.Binding
|
||||
|
||||
private BoundElseClause BindElseClause(ElseClause node)
|
||||
{
|
||||
var body = BindStatementList(node.Body);
|
||||
var body = BindBlockStatement(node.Body);
|
||||
return new BoundElseClause(node, body);
|
||||
}
|
||||
|
||||
private BoundBlockStatement BindBlockStatement(BlockStatementSyntaxNode node)
|
||||
{
|
||||
var boundStatements = BindStatementList(node.Statements);
|
||||
return new BoundBlockStatement(node, boundStatements);
|
||||
}
|
||||
|
||||
private ImmutableArray<BoundStatement> BindStatementList(SyntaxNodeOrTokenList list)
|
||||
{
|
||||
var builder = ImmutableArray.CreateBuilder<BoundStatement>();
|
||||
@ -124,7 +130,7 @@ namespace Parser.Binding
|
||||
private BoundElseIfClause BindElseIfClause(ElseifClause node)
|
||||
{
|
||||
var condition = BindExpression(node.Condition);
|
||||
var body = BindStatementList(node.Body);
|
||||
var body = BindBlockStatement(node.Body);
|
||||
return new BoundElseIfClause(node, condition, body);
|
||||
}
|
||||
|
||||
|
@ -13,6 +13,7 @@ namespace Parser.Binding
|
||||
// Statements
|
||||
|
||||
AbstractMethodDeclaration,
|
||||
BlockStatement,
|
||||
ClassDeclaration,
|
||||
ConcreteMethodDeclaration,
|
||||
EmptyStatement,
|
||||
@ -144,6 +145,19 @@ namespace Parser.Binding
|
||||
public override BoundNodeKind Kind => BoundNodeKind.AbstractMethodDeclaration;
|
||||
}
|
||||
|
||||
public class BoundBlockStatement : BoundStatement
|
||||
{
|
||||
public BoundBlockStatement(SyntaxNode syntax, ImmutableArray<BoundStatement> statements)
|
||||
: base(syntax)
|
||||
{
|
||||
Statements = statements;
|
||||
}
|
||||
|
||||
public override BoundNodeKind Kind => BoundNodeKind.BlockStatement;
|
||||
|
||||
public ImmutableArray<BoundStatement> Statements { get; }
|
||||
}
|
||||
|
||||
public class BoundClassDeclaration : BoundStatement
|
||||
{
|
||||
public BoundClassDeclaration(SyntaxNode syntax)
|
||||
@ -209,7 +223,7 @@ namespace Parser.Binding
|
||||
|
||||
public class BoundIfStatement : BoundStatement
|
||||
{
|
||||
public BoundIfStatement(SyntaxNode syntax, BoundExpression condition, ImmutableArray<BoundStatement> body, IEnumerable<ElseifClause> elseIfClauses, BoundElseClause? elseClause)
|
||||
public BoundIfStatement(SyntaxNode syntax, BoundExpression condition, BoundBlockStatement body, IEnumerable<ElseifClause> elseIfClauses, BoundElseClause? elseClause)
|
||||
: base(syntax)
|
||||
{
|
||||
Condition = condition;
|
||||
@ -219,7 +233,7 @@ namespace Parser.Binding
|
||||
}
|
||||
|
||||
public BoundExpression Condition { get; }
|
||||
public ImmutableArray<BoundStatement> Body { get; }
|
||||
public BoundBlockStatement Body { get; }
|
||||
public IEnumerable<ElseifClause> ElseIfClauses { get; }
|
||||
public BoundElseClause? ElseClause { get; }
|
||||
|
||||
@ -511,7 +525,7 @@ namespace Parser.Binding
|
||||
|
||||
public class BoundElseIfClause : BoundNode
|
||||
{
|
||||
public BoundElseIfClause(SyntaxNode syntax, BoundExpression condition, ImmutableArray<BoundStatement> body)
|
||||
public BoundElseIfClause(SyntaxNode syntax, BoundExpression condition, BoundBlockStatement body)
|
||||
: base(syntax)
|
||||
{
|
||||
Condition = condition;
|
||||
@ -519,19 +533,19 @@ namespace Parser.Binding
|
||||
}
|
||||
|
||||
public BoundExpression Condition { get; }
|
||||
public ImmutableArray<BoundStatement> Body { get; }
|
||||
public BoundBlockStatement Body { get; }
|
||||
public override BoundNodeKind Kind => BoundNodeKind.ElseIfClause;
|
||||
}
|
||||
|
||||
public class BoundElseClause : BoundNode
|
||||
{
|
||||
public BoundElseClause(SyntaxNode syntax, ImmutableArray<BoundStatement> body)
|
||||
public BoundElseClause(SyntaxNode syntax, BoundBlockStatement body)
|
||||
: base(syntax)
|
||||
{
|
||||
Body = body;
|
||||
}
|
||||
|
||||
public ImmutableArray<BoundStatement> Body { get; }
|
||||
public BoundBlockStatement Body { get; }
|
||||
public override BoundNodeKind Kind => BoundNodeKind.ElseClause;
|
||||
}
|
||||
|
||||
|
@ -212,7 +212,7 @@ namespace Parser.Internal
|
||||
var name = EatToken(TokenKind.IdentifierToken);
|
||||
var inputDescription = ParseFunctionInputDescription();
|
||||
var commas = ParseOptionalCommas();
|
||||
var body = ParseStatementList();
|
||||
var body = ParseBlockStatement();
|
||||
var endKeyword = ParseEndKeyword();
|
||||
//var endKeyword =
|
||||
return Factory.FunctionDeclarationSyntax(
|
||||
@ -685,8 +685,8 @@ namespace Parser.Internal
|
||||
throw new Exception("Case label cannot be empty.");
|
||||
}
|
||||
var commas = ParseOptionalCommas();
|
||||
var statementList = ParseStatementList();
|
||||
return Factory.SwitchCaseSyntax(caseKeyword, caseId, commas, statementList);
|
||||
var body = ParseBlockStatement();
|
||||
return Factory.SwitchCaseSyntax(caseKeyword, caseId, commas, body);
|
||||
}
|
||||
|
||||
private SwitchStatementSyntaxNode ParseSwitchStatement()
|
||||
@ -722,7 +722,7 @@ namespace Parser.Internal
|
||||
}
|
||||
|
||||
var commas = ParseOptionalCommas();
|
||||
var body = ParseStatementList();
|
||||
var body = ParseBlockStatement();
|
||||
var endKeyword = EatIdentifier("end");
|
||||
return Factory.WhileStatementSyntax(
|
||||
whileKeyword,
|
||||
@ -741,14 +741,14 @@ namespace Parser.Internal
|
||||
throw new Exception("Condition in elseif clause cannot be empty.");
|
||||
}
|
||||
var commas = ParseOptionalCommas();
|
||||
var body = ParseStatementList();
|
||||
var body = ParseBlockStatement();
|
||||
return Factory.ElseifClause(elseifKeyword, condition, commas, body);
|
||||
}
|
||||
|
||||
private ElseClause ParseElseClause()
|
||||
{
|
||||
var elseKeyword = EatIdentifier("else");
|
||||
var body = ParseStatementList();
|
||||
var body = ParseBlockStatement();
|
||||
return Factory.ElseClause(elseKeyword, body);
|
||||
}
|
||||
|
||||
@ -761,7 +761,7 @@ namespace Parser.Internal
|
||||
throw new Exception("Condition in if statement cannot be empty.");
|
||||
}
|
||||
var commas = ParseOptionalSemicolonsOrCommas();
|
||||
var body = ParseStatementList();
|
||||
var body = ParseBlockStatement();
|
||||
var elseifClauses = new SyntaxListBuilder<ElseifClause>();
|
||||
ElseClause? elseClause = null;
|
||||
while (true)
|
||||
@ -804,7 +804,7 @@ namespace Parser.Internal
|
||||
|
||||
var forAssignment = (AssignmentExpressionSyntaxNode) expression;
|
||||
var commas = ParseOptionalSemicolonsOrCommas();
|
||||
var body = ParseStatementList();
|
||||
var body = ParseBlockStatement();
|
||||
var endKeyword = EatIdentifier("end");
|
||||
return Factory.ForStatementSyntax(
|
||||
forKeyword,
|
||||
@ -831,7 +831,7 @@ namespace Parser.Internal
|
||||
private TryCatchStatementSyntaxNode ParseTryCatchStatement()
|
||||
{
|
||||
var tryKeyword = EatIdentifier("try");
|
||||
var tryBody = ParseStatementList();
|
||||
var tryBody = ParseBlockStatement();
|
||||
var catchClause = ParseCatchClause();
|
||||
var endKeyword = EatIdentifier("end");
|
||||
return Factory.TryCatchStatementSyntax(tryKeyword, tryBody, catchClause, endKeyword);
|
||||
@ -927,7 +927,7 @@ namespace Parser.Internal
|
||||
var name = ParseCompoundName();
|
||||
var inputDescription = ParseFunctionInputDescription();
|
||||
var commas = ParseOptionalCommas();
|
||||
var body = ParseStatementList();
|
||||
var body = ParseBlockStatement();
|
||||
var endKeyword = ParseEndKeyword();
|
||||
return Factory.ConcreteMethodDeclarationSyntax(
|
||||
functionKeyword,
|
||||
@ -1191,6 +1191,12 @@ namespace Parser.Internal
|
||||
return ParseExpressionStatement();
|
||||
}
|
||||
|
||||
private BlockStatementSyntaxNode ParseBlockStatement()
|
||||
{
|
||||
var statements = ParseStatementList();
|
||||
return Factory.BlockStatementSyntax(statements);
|
||||
}
|
||||
|
||||
private SyntaxList ParseStatementList()
|
||||
{
|
||||
var builder = new SyntaxListBuilder();
|
||||
|
@ -8,7 +8,12 @@ namespace Parser.Internal
|
||||
return new FileSyntaxNode(statementList, endOfFile);
|
||||
}
|
||||
|
||||
public FunctionDeclarationSyntaxNode FunctionDeclarationSyntax(SyntaxToken functionKeyword, FunctionOutputDescriptionSyntaxNode? outputDescription, SyntaxToken name, FunctionInputDescriptionSyntaxNode? inputDescription, SyntaxList<SyntaxToken> commas, SyntaxList body, EndKeywordSyntaxNode? endKeyword)
|
||||
public BlockStatementSyntaxNode BlockStatementSyntax(SyntaxList statements)
|
||||
{
|
||||
return new BlockStatementSyntaxNode(statements);
|
||||
}
|
||||
|
||||
public FunctionDeclarationSyntaxNode FunctionDeclarationSyntax(SyntaxToken functionKeyword, FunctionOutputDescriptionSyntaxNode? outputDescription, SyntaxToken name, FunctionInputDescriptionSyntaxNode? inputDescription, SyntaxList<SyntaxToken> commas, BlockStatementSyntaxNode body, EndKeywordSyntaxNode? endKeyword)
|
||||
{
|
||||
return new FunctionDeclarationSyntaxNode(functionKeyword, outputDescription, name, inputDescription, commas, body, endKeyword);
|
||||
}
|
||||
@ -28,32 +33,32 @@ namespace Parser.Internal
|
||||
return new SwitchStatementSyntaxNode(switchKeyword, switchExpression, optionalCommas, cases, endKeyword);
|
||||
}
|
||||
|
||||
public SwitchCaseSyntaxNode SwitchCaseSyntax(SyntaxToken caseKeyword, ExpressionSyntaxNode caseIdentifier, SyntaxList<SyntaxToken> optionalCommas, SyntaxList body)
|
||||
public SwitchCaseSyntaxNode SwitchCaseSyntax(SyntaxToken caseKeyword, ExpressionSyntaxNode caseIdentifier, SyntaxList<SyntaxToken> optionalCommas, BlockStatementSyntaxNode body)
|
||||
{
|
||||
return new SwitchCaseSyntaxNode(caseKeyword, caseIdentifier, optionalCommas, body);
|
||||
}
|
||||
|
||||
public WhileStatementSyntaxNode WhileStatementSyntax(SyntaxToken whileKeyword, ExpressionSyntaxNode condition, SyntaxList<SyntaxToken> optionalCommas, SyntaxList body, SyntaxToken endKeyword)
|
||||
public WhileStatementSyntaxNode WhileStatementSyntax(SyntaxToken whileKeyword, ExpressionSyntaxNode condition, SyntaxList<SyntaxToken> optionalCommas, BlockStatementSyntaxNode body, SyntaxToken endKeyword)
|
||||
{
|
||||
return new WhileStatementSyntaxNode(whileKeyword, condition, optionalCommas, body, endKeyword);
|
||||
}
|
||||
|
||||
public ElseifClause ElseifClause(SyntaxToken elseifKeyword, ExpressionSyntaxNode condition, SyntaxList<SyntaxToken> optionalCommas, SyntaxList body)
|
||||
public ElseifClause ElseifClause(SyntaxToken elseifKeyword, ExpressionSyntaxNode condition, SyntaxList<SyntaxToken> optionalCommas, BlockStatementSyntaxNode body)
|
||||
{
|
||||
return new ElseifClause(elseifKeyword, condition, optionalCommas, body);
|
||||
}
|
||||
|
||||
public ElseClause ElseClause(SyntaxToken elseKeyword, SyntaxList body)
|
||||
public ElseClause ElseClause(SyntaxToken elseKeyword, BlockStatementSyntaxNode body)
|
||||
{
|
||||
return new ElseClause(elseKeyword, body);
|
||||
}
|
||||
|
||||
public IfStatementSyntaxNode IfStatementSyntax(SyntaxToken ifKeyword, ExpressionSyntaxNode condition, SyntaxList<SyntaxToken> optionalCommas, SyntaxList body, SyntaxList<ElseifClause> elseifClauses, ElseClause? elseClause, SyntaxToken endKeyword)
|
||||
public IfStatementSyntaxNode IfStatementSyntax(SyntaxToken ifKeyword, ExpressionSyntaxNode condition, SyntaxList<SyntaxToken> optionalCommas, BlockStatementSyntaxNode body, SyntaxList<ElseifClause> elseifClauses, ElseClause? elseClause, SyntaxToken endKeyword)
|
||||
{
|
||||
return new IfStatementSyntaxNode(ifKeyword, condition, optionalCommas, body, elseifClauses, elseClause, endKeyword);
|
||||
}
|
||||
|
||||
public ForStatementSyntaxNode ForStatementSyntax(SyntaxToken forKeyword, AssignmentExpressionSyntaxNode assignment, SyntaxList<SyntaxToken> optionalCommas, SyntaxList body, SyntaxToken endKeyword)
|
||||
public ForStatementSyntaxNode ForStatementSyntax(SyntaxToken forKeyword, AssignmentExpressionSyntaxNode assignment, SyntaxList<SyntaxToken> optionalCommas, BlockStatementSyntaxNode body, SyntaxToken endKeyword)
|
||||
{
|
||||
return new ForStatementSyntaxNode(forKeyword, assignment, optionalCommas, body, endKeyword);
|
||||
}
|
||||
@ -68,7 +73,7 @@ namespace Parser.Internal
|
||||
return new CatchClauseSyntaxNode(catchKeyword, catchBody);
|
||||
}
|
||||
|
||||
public TryCatchStatementSyntaxNode TryCatchStatementSyntax(SyntaxToken tryKeyword, SyntaxList tryBody, CatchClauseSyntaxNode? catchClause, SyntaxToken endKeyword)
|
||||
public TryCatchStatementSyntaxNode TryCatchStatementSyntax(SyntaxToken tryKeyword, BlockStatementSyntaxNode tryBody, CatchClauseSyntaxNode? catchClause, SyntaxToken endKeyword)
|
||||
{
|
||||
return new TryCatchStatementSyntaxNode(tryKeyword, tryBody, catchClause, endKeyword);
|
||||
}
|
||||
@ -203,7 +208,7 @@ namespace Parser.Internal
|
||||
return new AttributeListSyntaxNode(openingBracket, nodes, closingBracket);
|
||||
}
|
||||
|
||||
public ConcreteMethodDeclarationSyntaxNode ConcreteMethodDeclarationSyntax(SyntaxToken functionKeyword, FunctionOutputDescriptionSyntaxNode? outputDescription, CompoundNameExpressionSyntaxNode name, FunctionInputDescriptionSyntaxNode? inputDescription, SyntaxList<SyntaxToken> commas, SyntaxList body, EndKeywordSyntaxNode? endKeyword)
|
||||
public ConcreteMethodDeclarationSyntaxNode ConcreteMethodDeclarationSyntax(SyntaxToken functionKeyword, FunctionOutputDescriptionSyntaxNode? outputDescription, CompoundNameExpressionSyntaxNode name, FunctionInputDescriptionSyntaxNode? inputDescription, SyntaxList<SyntaxToken> commas, BlockStatementSyntaxNode body, EndKeywordSyntaxNode? endKeyword)
|
||||
{
|
||||
return new ConcreteMethodDeclarationSyntaxNode(functionKeyword, outputDescription, name, inputDescription, commas, body, endKeyword);
|
||||
}
|
||||
|
@ -44,6 +44,44 @@ namespace Parser.Internal
|
||||
}
|
||||
}
|
||||
|
||||
internal class BlockStatementSyntaxNode : StatementSyntaxNode
|
||||
{
|
||||
internal readonly SyntaxList _statements;
|
||||
internal BlockStatementSyntaxNode(SyntaxList statements): base(TokenKind.BlockStatement)
|
||||
{
|
||||
Slots = 1;
|
||||
this.AdjustWidth(statements);
|
||||
_statements = statements;
|
||||
}
|
||||
|
||||
internal BlockStatementSyntaxNode(SyntaxList statements, TokenDiagnostic[] diagnostics): base(TokenKind.BlockStatement, diagnostics)
|
||||
{
|
||||
Slots = 1;
|
||||
this.AdjustWidth(statements);
|
||||
_statements = statements;
|
||||
}
|
||||
|
||||
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
|
||||
{
|
||||
return new Parser.BlockStatementSyntaxNode(parent, this, position);
|
||||
}
|
||||
|
||||
public override GreenNode SetDiagnostics(TokenDiagnostic[] diagnostics)
|
||||
{
|
||||
return new BlockStatementSyntaxNode(_statements, diagnostics);
|
||||
}
|
||||
|
||||
public override GreenNode? GetSlot(int i)
|
||||
{
|
||||
return i switch
|
||||
{
|
||||
0 => _statements, _ => null
|
||||
}
|
||||
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
internal class FunctionDeclarationSyntaxNode : StatementSyntaxNode
|
||||
{
|
||||
internal readonly SyntaxToken _functionKeyword;
|
||||
@ -51,9 +89,9 @@ namespace Parser.Internal
|
||||
internal readonly SyntaxToken _name;
|
||||
internal readonly FunctionInputDescriptionSyntaxNode? _inputDescription;
|
||||
internal readonly SyntaxList<SyntaxToken> _commas;
|
||||
internal readonly SyntaxList _body;
|
||||
internal readonly BlockStatementSyntaxNode _body;
|
||||
internal readonly EndKeywordSyntaxNode? _endKeyword;
|
||||
internal FunctionDeclarationSyntaxNode(SyntaxToken functionKeyword, FunctionOutputDescriptionSyntaxNode? outputDescription, SyntaxToken name, FunctionInputDescriptionSyntaxNode? inputDescription, SyntaxList<SyntaxToken> commas, SyntaxList body, EndKeywordSyntaxNode? endKeyword): base(TokenKind.FunctionDeclaration)
|
||||
internal FunctionDeclarationSyntaxNode(SyntaxToken functionKeyword, FunctionOutputDescriptionSyntaxNode? outputDescription, SyntaxToken name, FunctionInputDescriptionSyntaxNode? inputDescription, SyntaxList<SyntaxToken> commas, BlockStatementSyntaxNode body, EndKeywordSyntaxNode? endKeyword): base(TokenKind.FunctionDeclaration)
|
||||
{
|
||||
Slots = 7;
|
||||
this.AdjustWidth(functionKeyword);
|
||||
@ -72,7 +110,7 @@ namespace Parser.Internal
|
||||
_endKeyword = endKeyword;
|
||||
}
|
||||
|
||||
internal FunctionDeclarationSyntaxNode(SyntaxToken functionKeyword, FunctionOutputDescriptionSyntaxNode? outputDescription, SyntaxToken name, FunctionInputDescriptionSyntaxNode? inputDescription, SyntaxList<SyntaxToken> commas, SyntaxList body, EndKeywordSyntaxNode? endKeyword, TokenDiagnostic[] diagnostics): base(TokenKind.FunctionDeclaration, diagnostics)
|
||||
internal FunctionDeclarationSyntaxNode(SyntaxToken functionKeyword, FunctionOutputDescriptionSyntaxNode? outputDescription, SyntaxToken name, FunctionInputDescriptionSyntaxNode? inputDescription, SyntaxList<SyntaxToken> commas, BlockStatementSyntaxNode body, EndKeywordSyntaxNode? endKeyword, TokenDiagnostic[] diagnostics): base(TokenKind.FunctionDeclaration, diagnostics)
|
||||
{
|
||||
Slots = 7;
|
||||
this.AdjustWidth(functionKeyword);
|
||||
@ -266,8 +304,8 @@ namespace Parser.Internal
|
||||
internal readonly SyntaxToken _caseKeyword;
|
||||
internal readonly ExpressionSyntaxNode _caseIdentifier;
|
||||
internal readonly SyntaxList<SyntaxToken> _optionalCommas;
|
||||
internal readonly SyntaxList _body;
|
||||
internal SwitchCaseSyntaxNode(SyntaxToken caseKeyword, ExpressionSyntaxNode caseIdentifier, SyntaxList<SyntaxToken> optionalCommas, SyntaxList body): base(TokenKind.SwitchCase)
|
||||
internal readonly BlockStatementSyntaxNode _body;
|
||||
internal SwitchCaseSyntaxNode(SyntaxToken caseKeyword, ExpressionSyntaxNode caseIdentifier, SyntaxList<SyntaxToken> optionalCommas, BlockStatementSyntaxNode body): base(TokenKind.SwitchCase)
|
||||
{
|
||||
Slots = 4;
|
||||
this.AdjustWidth(caseKeyword);
|
||||
@ -280,7 +318,7 @@ namespace Parser.Internal
|
||||
_body = body;
|
||||
}
|
||||
|
||||
internal SwitchCaseSyntaxNode(SyntaxToken caseKeyword, ExpressionSyntaxNode caseIdentifier, SyntaxList<SyntaxToken> optionalCommas, SyntaxList body, TokenDiagnostic[] diagnostics): base(TokenKind.SwitchCase, diagnostics)
|
||||
internal SwitchCaseSyntaxNode(SyntaxToken caseKeyword, ExpressionSyntaxNode caseIdentifier, SyntaxList<SyntaxToken> optionalCommas, BlockStatementSyntaxNode body, TokenDiagnostic[] diagnostics): base(TokenKind.SwitchCase, diagnostics)
|
||||
{
|
||||
Slots = 4;
|
||||
this.AdjustWidth(caseKeyword);
|
||||
@ -319,9 +357,9 @@ namespace Parser.Internal
|
||||
internal readonly SyntaxToken _whileKeyword;
|
||||
internal readonly ExpressionSyntaxNode _condition;
|
||||
internal readonly SyntaxList<SyntaxToken> _optionalCommas;
|
||||
internal readonly SyntaxList _body;
|
||||
internal readonly BlockStatementSyntaxNode _body;
|
||||
internal readonly SyntaxToken _endKeyword;
|
||||
internal WhileStatementSyntaxNode(SyntaxToken whileKeyword, ExpressionSyntaxNode condition, SyntaxList<SyntaxToken> optionalCommas, SyntaxList body, SyntaxToken endKeyword): base(TokenKind.WhileStatement)
|
||||
internal WhileStatementSyntaxNode(SyntaxToken whileKeyword, ExpressionSyntaxNode condition, SyntaxList<SyntaxToken> optionalCommas, BlockStatementSyntaxNode body, SyntaxToken endKeyword): base(TokenKind.WhileStatement)
|
||||
{
|
||||
Slots = 5;
|
||||
this.AdjustWidth(whileKeyword);
|
||||
@ -336,7 +374,7 @@ namespace Parser.Internal
|
||||
_endKeyword = endKeyword;
|
||||
}
|
||||
|
||||
internal WhileStatementSyntaxNode(SyntaxToken whileKeyword, ExpressionSyntaxNode condition, SyntaxList<SyntaxToken> optionalCommas, SyntaxList body, SyntaxToken endKeyword, TokenDiagnostic[] diagnostics): base(TokenKind.WhileStatement, diagnostics)
|
||||
internal WhileStatementSyntaxNode(SyntaxToken whileKeyword, ExpressionSyntaxNode condition, SyntaxList<SyntaxToken> optionalCommas, BlockStatementSyntaxNode body, SyntaxToken endKeyword, TokenDiagnostic[] diagnostics): base(TokenKind.WhileStatement, diagnostics)
|
||||
{
|
||||
Slots = 5;
|
||||
this.AdjustWidth(whileKeyword);
|
||||
@ -377,8 +415,8 @@ namespace Parser.Internal
|
||||
internal readonly SyntaxToken _elseifKeyword;
|
||||
internal readonly ExpressionSyntaxNode _condition;
|
||||
internal readonly SyntaxList<SyntaxToken> _optionalCommas;
|
||||
internal readonly SyntaxList _body;
|
||||
internal ElseifClause(SyntaxToken elseifKeyword, ExpressionSyntaxNode condition, SyntaxList<SyntaxToken> optionalCommas, SyntaxList body): base(TokenKind.ElseifClause)
|
||||
internal readonly BlockStatementSyntaxNode _body;
|
||||
internal ElseifClause(SyntaxToken elseifKeyword, ExpressionSyntaxNode condition, SyntaxList<SyntaxToken> optionalCommas, BlockStatementSyntaxNode body): base(TokenKind.ElseifClause)
|
||||
{
|
||||
Slots = 4;
|
||||
this.AdjustWidth(elseifKeyword);
|
||||
@ -391,7 +429,7 @@ namespace Parser.Internal
|
||||
_body = body;
|
||||
}
|
||||
|
||||
internal ElseifClause(SyntaxToken elseifKeyword, ExpressionSyntaxNode condition, SyntaxList<SyntaxToken> optionalCommas, SyntaxList body, TokenDiagnostic[] diagnostics): base(TokenKind.ElseifClause, diagnostics)
|
||||
internal ElseifClause(SyntaxToken elseifKeyword, ExpressionSyntaxNode condition, SyntaxList<SyntaxToken> optionalCommas, BlockStatementSyntaxNode body, TokenDiagnostic[] diagnostics): base(TokenKind.ElseifClause, diagnostics)
|
||||
{
|
||||
Slots = 4;
|
||||
this.AdjustWidth(elseifKeyword);
|
||||
@ -428,8 +466,8 @@ namespace Parser.Internal
|
||||
internal class ElseClause : SyntaxNode
|
||||
{
|
||||
internal readonly SyntaxToken _elseKeyword;
|
||||
internal readonly SyntaxList _body;
|
||||
internal ElseClause(SyntaxToken elseKeyword, SyntaxList body): base(TokenKind.ElseClause)
|
||||
internal readonly BlockStatementSyntaxNode _body;
|
||||
internal ElseClause(SyntaxToken elseKeyword, BlockStatementSyntaxNode body): base(TokenKind.ElseClause)
|
||||
{
|
||||
Slots = 2;
|
||||
this.AdjustWidth(elseKeyword);
|
||||
@ -438,7 +476,7 @@ namespace Parser.Internal
|
||||
_body = body;
|
||||
}
|
||||
|
||||
internal ElseClause(SyntaxToken elseKeyword, SyntaxList body, TokenDiagnostic[] diagnostics): base(TokenKind.ElseClause, diagnostics)
|
||||
internal ElseClause(SyntaxToken elseKeyword, BlockStatementSyntaxNode body, TokenDiagnostic[] diagnostics): base(TokenKind.ElseClause, diagnostics)
|
||||
{
|
||||
Slots = 2;
|
||||
this.AdjustWidth(elseKeyword);
|
||||
@ -473,11 +511,11 @@ namespace Parser.Internal
|
||||
internal readonly SyntaxToken _ifKeyword;
|
||||
internal readonly ExpressionSyntaxNode _condition;
|
||||
internal readonly SyntaxList<SyntaxToken> _optionalCommas;
|
||||
internal readonly SyntaxList _body;
|
||||
internal readonly BlockStatementSyntaxNode _body;
|
||||
internal readonly SyntaxList<ElseifClause> _elseifClauses;
|
||||
internal readonly ElseClause? _elseClause;
|
||||
internal readonly SyntaxToken _endKeyword;
|
||||
internal IfStatementSyntaxNode(SyntaxToken ifKeyword, ExpressionSyntaxNode condition, SyntaxList<SyntaxToken> optionalCommas, SyntaxList body, SyntaxList<ElseifClause> elseifClauses, ElseClause? elseClause, SyntaxToken endKeyword): base(TokenKind.IfStatement)
|
||||
internal IfStatementSyntaxNode(SyntaxToken ifKeyword, ExpressionSyntaxNode condition, SyntaxList<SyntaxToken> optionalCommas, BlockStatementSyntaxNode body, SyntaxList<ElseifClause> elseifClauses, ElseClause? elseClause, SyntaxToken endKeyword): base(TokenKind.IfStatement)
|
||||
{
|
||||
Slots = 7;
|
||||
this.AdjustWidth(ifKeyword);
|
||||
@ -496,7 +534,7 @@ namespace Parser.Internal
|
||||
_endKeyword = endKeyword;
|
||||
}
|
||||
|
||||
internal IfStatementSyntaxNode(SyntaxToken ifKeyword, ExpressionSyntaxNode condition, SyntaxList<SyntaxToken> optionalCommas, SyntaxList body, SyntaxList<ElseifClause> elseifClauses, ElseClause? elseClause, SyntaxToken endKeyword, TokenDiagnostic[] diagnostics): base(TokenKind.IfStatement, diagnostics)
|
||||
internal IfStatementSyntaxNode(SyntaxToken ifKeyword, ExpressionSyntaxNode condition, SyntaxList<SyntaxToken> optionalCommas, BlockStatementSyntaxNode body, SyntaxList<ElseifClause> elseifClauses, ElseClause? elseClause, SyntaxToken endKeyword, TokenDiagnostic[] diagnostics): base(TokenKind.IfStatement, diagnostics)
|
||||
{
|
||||
Slots = 7;
|
||||
this.AdjustWidth(ifKeyword);
|
||||
@ -541,9 +579,9 @@ namespace Parser.Internal
|
||||
internal readonly SyntaxToken _forKeyword;
|
||||
internal readonly AssignmentExpressionSyntaxNode _assignment;
|
||||
internal readonly SyntaxList<SyntaxToken> _optionalCommas;
|
||||
internal readonly SyntaxList _body;
|
||||
internal readonly BlockStatementSyntaxNode _body;
|
||||
internal readonly SyntaxToken _endKeyword;
|
||||
internal ForStatementSyntaxNode(SyntaxToken forKeyword, AssignmentExpressionSyntaxNode assignment, SyntaxList<SyntaxToken> optionalCommas, SyntaxList body, SyntaxToken endKeyword): base(TokenKind.ForStatement)
|
||||
internal ForStatementSyntaxNode(SyntaxToken forKeyword, AssignmentExpressionSyntaxNode assignment, SyntaxList<SyntaxToken> optionalCommas, BlockStatementSyntaxNode body, SyntaxToken endKeyword): base(TokenKind.ForStatement)
|
||||
{
|
||||
Slots = 5;
|
||||
this.AdjustWidth(forKeyword);
|
||||
@ -558,7 +596,7 @@ namespace Parser.Internal
|
||||
_endKeyword = endKeyword;
|
||||
}
|
||||
|
||||
internal ForStatementSyntaxNode(SyntaxToken forKeyword, AssignmentExpressionSyntaxNode assignment, SyntaxList<SyntaxToken> optionalCommas, SyntaxList body, SyntaxToken endKeyword, TokenDiagnostic[] diagnostics): base(TokenKind.ForStatement, diagnostics)
|
||||
internal ForStatementSyntaxNode(SyntaxToken forKeyword, AssignmentExpressionSyntaxNode assignment, SyntaxList<SyntaxToken> optionalCommas, BlockStatementSyntaxNode body, SyntaxToken endKeyword, TokenDiagnostic[] diagnostics): base(TokenKind.ForStatement, diagnostics)
|
||||
{
|
||||
Slots = 5;
|
||||
this.AdjustWidth(forKeyword);
|
||||
@ -688,10 +726,10 @@ namespace Parser.Internal
|
||||
internal class TryCatchStatementSyntaxNode : StatementSyntaxNode
|
||||
{
|
||||
internal readonly SyntaxToken _tryKeyword;
|
||||
internal readonly SyntaxList _tryBody;
|
||||
internal readonly BlockStatementSyntaxNode _tryBody;
|
||||
internal readonly CatchClauseSyntaxNode? _catchClause;
|
||||
internal readonly SyntaxToken _endKeyword;
|
||||
internal TryCatchStatementSyntaxNode(SyntaxToken tryKeyword, SyntaxList tryBody, CatchClauseSyntaxNode? catchClause, SyntaxToken endKeyword): base(TokenKind.TryCatchStatement)
|
||||
internal TryCatchStatementSyntaxNode(SyntaxToken tryKeyword, BlockStatementSyntaxNode tryBody, CatchClauseSyntaxNode? catchClause, SyntaxToken endKeyword): base(TokenKind.TryCatchStatement)
|
||||
{
|
||||
Slots = 4;
|
||||
this.AdjustWidth(tryKeyword);
|
||||
@ -704,7 +742,7 @@ namespace Parser.Internal
|
||||
_endKeyword = endKeyword;
|
||||
}
|
||||
|
||||
internal TryCatchStatementSyntaxNode(SyntaxToken tryKeyword, SyntaxList tryBody, CatchClauseSyntaxNode? catchClause, SyntaxToken endKeyword, TokenDiagnostic[] diagnostics): base(TokenKind.TryCatchStatement, diagnostics)
|
||||
internal TryCatchStatementSyntaxNode(SyntaxToken tryKeyword, BlockStatementSyntaxNode tryBody, CatchClauseSyntaxNode? catchClause, SyntaxToken endKeyword, TokenDiagnostic[] diagnostics): base(TokenKind.TryCatchStatement, diagnostics)
|
||||
{
|
||||
Slots = 4;
|
||||
this.AdjustWidth(tryKeyword);
|
||||
@ -1878,9 +1916,9 @@ namespace Parser.Internal
|
||||
internal readonly CompoundNameExpressionSyntaxNode _name;
|
||||
internal readonly FunctionInputDescriptionSyntaxNode? _inputDescription;
|
||||
internal readonly SyntaxList<SyntaxToken> _commas;
|
||||
internal readonly SyntaxList _body;
|
||||
internal readonly BlockStatementSyntaxNode _body;
|
||||
internal readonly EndKeywordSyntaxNode? _endKeyword;
|
||||
internal ConcreteMethodDeclarationSyntaxNode(SyntaxToken functionKeyword, FunctionOutputDescriptionSyntaxNode? outputDescription, CompoundNameExpressionSyntaxNode name, FunctionInputDescriptionSyntaxNode? inputDescription, SyntaxList<SyntaxToken> commas, SyntaxList body, EndKeywordSyntaxNode? endKeyword): base(TokenKind.ConcreteMethodDeclaration)
|
||||
internal ConcreteMethodDeclarationSyntaxNode(SyntaxToken functionKeyword, FunctionOutputDescriptionSyntaxNode? outputDescription, CompoundNameExpressionSyntaxNode name, FunctionInputDescriptionSyntaxNode? inputDescription, SyntaxList<SyntaxToken> commas, BlockStatementSyntaxNode body, EndKeywordSyntaxNode? endKeyword): base(TokenKind.ConcreteMethodDeclaration)
|
||||
{
|
||||
Slots = 7;
|
||||
this.AdjustWidth(functionKeyword);
|
||||
@ -1899,7 +1937,7 @@ namespace Parser.Internal
|
||||
_endKeyword = endKeyword;
|
||||
}
|
||||
|
||||
internal ConcreteMethodDeclarationSyntaxNode(SyntaxToken functionKeyword, FunctionOutputDescriptionSyntaxNode? outputDescription, CompoundNameExpressionSyntaxNode name, FunctionInputDescriptionSyntaxNode? inputDescription, SyntaxList<SyntaxToken> commas, SyntaxList body, EndKeywordSyntaxNode? endKeyword, TokenDiagnostic[] diagnostics): base(TokenKind.ConcreteMethodDeclaration, diagnostics)
|
||||
internal ConcreteMethodDeclarationSyntaxNode(SyntaxToken functionKeyword, FunctionOutputDescriptionSyntaxNode? outputDescription, CompoundNameExpressionSyntaxNode name, FunctionInputDescriptionSyntaxNode? inputDescription, SyntaxList<SyntaxToken> commas, BlockStatementSyntaxNode body, EndKeywordSyntaxNode? endKeyword, TokenDiagnostic[] diagnostics): base(TokenKind.ConcreteMethodDeclaration, diagnostics)
|
||||
{
|
||||
Slots = 7;
|
||||
this.AdjustWidth(functionKeyword);
|
||||
|
@ -4,13 +4,16 @@
|
||||
<Field Type="SyntaxList" Name="statementList" />
|
||||
<Field Type="SyntaxToken" Name="endOfFile" />
|
||||
</Class>
|
||||
<Class Name="BlockStatementSyntaxNode" BaseClass="StatementSyntaxNode" Kind="BlockStatement">
|
||||
<Field Type="SyntaxList" Name="statements" />
|
||||
</Class>
|
||||
<Class Name="FunctionDeclarationSyntaxNode" BaseClass="StatementSyntaxNode" Kind="FunctionDeclaration">
|
||||
<Field Type="SyntaxToken" Name="functionKeyword" />
|
||||
<Field Type="FunctionOutputDescriptionSyntaxNode" Name="outputDescription" Nullable="true" />
|
||||
<Field Type="SyntaxToken" Name="name" />
|
||||
<Field Type="FunctionInputDescriptionSyntaxNode" Name="inputDescription" Nullable="true"/>
|
||||
<Field Type="SyntaxList<SyntaxToken>" Name="commas" />
|
||||
<Field Type="SyntaxList" Name="body" />
|
||||
<Field Type="BlockStatementSyntaxNode" Name="body" />
|
||||
<Field Type="EndKeywordSyntaxNode" Name="endKeyword" Nullable="true"/>
|
||||
</Class>
|
||||
<Class Name="FunctionOutputDescriptionSyntaxNode" BaseClass="SyntaxNode" Kind="FunctionOutputDescription">
|
||||
@ -33,30 +36,30 @@
|
||||
<Field Type="SyntaxToken" Name="caseKeyword" />
|
||||
<Field Type="ExpressionSyntaxNode" Name="caseIdentifier" />
|
||||
<Field Type="SyntaxList<SyntaxToken>" Name="optionalCommas" />
|
||||
<Field Type="SyntaxList" Name="body" />
|
||||
<Field Type="BlockStatementSyntaxNode" Name="body" />
|
||||
</Class>
|
||||
<Class Name="WhileStatementSyntaxNode" BaseClass="StatementSyntaxNode" Kind="WhileStatement">
|
||||
<Field Type="SyntaxToken" Name="whileKeyword" />
|
||||
<Field Type="ExpressionSyntaxNode" Name="condition" />
|
||||
<Field Type="SyntaxList<SyntaxToken>" Name="optionalCommas" />
|
||||
<Field Type="SyntaxList" Name="body" />
|
||||
<Field Type="BlockStatementSyntaxNode" Name="body" />
|
||||
<Field Type="SyntaxToken" Name="endKeyword" />
|
||||
</Class>
|
||||
<Class Name="ElseifClause" BaseClass="SyntaxNode" Kind="ElseifClause">
|
||||
<Field Type="SyntaxToken" Name="elseifKeyword" />
|
||||
<Field Type="ExpressionSyntaxNode" Name="condition" />
|
||||
<Field Type="SyntaxList<SyntaxToken>" Name="optionalCommas" />
|
||||
<Field Type="SyntaxList" Name="body" />
|
||||
<Field Type="BlockStatementSyntaxNode" Name="body" />
|
||||
</Class>
|
||||
<Class Name="ElseClause" BaseClass="SyntaxNode" Kind="ElseClause">
|
||||
<Field Type="SyntaxToken" Name="elseKeyword" />
|
||||
<Field Type="SyntaxList" Name="body" />
|
||||
<Field Type="BlockStatementSyntaxNode" Name="body" />
|
||||
</Class>
|
||||
<Class Name="IfStatementSyntaxNode" BaseClass="StatementSyntaxNode" Kind="IfStatement">
|
||||
<Field Type="SyntaxToken" Name="ifKeyword" />
|
||||
<Field Type="ExpressionSyntaxNode" Name="condition" />
|
||||
<Field Type="SyntaxList<SyntaxToken>" Name="optionalCommas" />
|
||||
<Field Type="SyntaxList" Name="body" />
|
||||
<Field Type="BlockStatementSyntaxNode" Name="body" />
|
||||
<Field Type="SyntaxList<ElseifClause>" Name="elseifClauses" />
|
||||
<Field Type="ElseClause" Name="elseClause" Nullable="true" />
|
||||
<Field Type="SyntaxToken" Name="endKeyword" />
|
||||
@ -65,7 +68,7 @@
|
||||
<Field Type="SyntaxToken" Name="forKeyword" />
|
||||
<Field Type="AssignmentExpressionSyntaxNode" Name="assignment" />
|
||||
<Field Type="SyntaxList<SyntaxToken>" Name="optionalCommas" />
|
||||
<Field Type="SyntaxList" Name="body" />
|
||||
<Field Type="BlockStatementSyntaxNode" Name="body" />
|
||||
<Field Type="SyntaxToken" Name="endKeyword" />
|
||||
</Class>
|
||||
<Class Name="AssignmentExpressionSyntaxNode" BaseClass="ExpressionSyntaxNode" Kind="AssignmentExpression">
|
||||
@ -79,7 +82,7 @@
|
||||
</Class>
|
||||
<Class Name="TryCatchStatementSyntaxNode" BaseClass="StatementSyntaxNode" Kind="TryCatchStatement">
|
||||
<Field Type="SyntaxToken" Name="tryKeyword" />
|
||||
<Field Type="SyntaxList" Name="tryBody" />
|
||||
<Field Type="BlockStatementSyntaxNode" Name="tryBody" />
|
||||
<Field Type="CatchClauseSyntaxNode" Name="catchClause" Nullable="true" />
|
||||
<Field Type="SyntaxToken" Name="endKeyword" />
|
||||
</Class>
|
||||
@ -196,7 +199,7 @@
|
||||
<Field Type="CompoundNameExpressionSyntaxNode" Name="name" />
|
||||
<Field Type="FunctionInputDescriptionSyntaxNode" Name="inputDescription" Nullable="true"/>
|
||||
<Field Type="SyntaxList<SyntaxToken>" Name="commas" />
|
||||
<Field Type="SyntaxList" Name="body" />
|
||||
<Field Type="BlockStatementSyntaxNode" Name="body" />
|
||||
<Field Type="EndKeywordSyntaxNode" Name="endKeyword" Nullable="true" />
|
||||
</Class>
|
||||
<Class Name="AbstractMethodDeclarationSyntaxNode" BaseClass="MethodDeclarationSyntaxNode" Kind="AbstractMethodDeclaration">
|
||||
|
@ -41,6 +41,38 @@ namespace Parser
|
||||
}
|
||||
}
|
||||
|
||||
public class BlockStatementSyntaxNode : StatementSyntaxNode
|
||||
{
|
||||
private SyntaxNode? _statements;
|
||||
internal BlockStatementSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position): base(parent, green, position)
|
||||
{
|
||||
}
|
||||
|
||||
public SyntaxNodeOrTokenList Statements
|
||||
{
|
||||
get
|
||||
{
|
||||
var red = this.GetRed(ref this._statements!, 0);
|
||||
return red is null ? throw new System.Exception("statements cannot be null.") : (SyntaxNodeOrTokenList)red;
|
||||
}
|
||||
}
|
||||
|
||||
internal override SyntaxNode? GetNode(int i)
|
||||
{
|
||||
return i switch
|
||||
{
|
||||
0 => GetRed(ref _statements!, 0), _ => null
|
||||
}
|
||||
|
||||
;
|
||||
}
|
||||
|
||||
public override void Accept(SyntaxVisitor visitor)
|
||||
{
|
||||
visitor.VisitBlockStatement(this);
|
||||
}
|
||||
}
|
||||
|
||||
public class FunctionDeclarationSyntaxNode : StatementSyntaxNode
|
||||
{
|
||||
private SyntaxNode? _outputDescription;
|
||||
@ -95,12 +127,12 @@ namespace Parser
|
||||
}
|
||||
}
|
||||
|
||||
public SyntaxNodeOrTokenList Body
|
||||
public BlockStatementSyntaxNode Body
|
||||
{
|
||||
get
|
||||
{
|
||||
var red = this.GetRed(ref this._body!, 5);
|
||||
return red is null ? throw new System.Exception("body cannot be null.") : (SyntaxNodeOrTokenList)red;
|
||||
return red is null ? throw new System.Exception("body cannot be null.") : (BlockStatementSyntaxNode)red;
|
||||
}
|
||||
}
|
||||
|
||||
@ -320,12 +352,12 @@ namespace Parser
|
||||
}
|
||||
}
|
||||
|
||||
public SyntaxNodeOrTokenList Body
|
||||
public BlockStatementSyntaxNode Body
|
||||
{
|
||||
get
|
||||
{
|
||||
var red = this.GetRed(ref this._body!, 3);
|
||||
return red is null ? throw new System.Exception("body cannot be null.") : (SyntaxNodeOrTokenList)red;
|
||||
return red is null ? throw new System.Exception("body cannot be null.") : (BlockStatementSyntaxNode)red;
|
||||
}
|
||||
}
|
||||
|
||||
@ -388,12 +420,12 @@ namespace Parser
|
||||
}
|
||||
}
|
||||
|
||||
public SyntaxNodeOrTokenList Body
|
||||
public BlockStatementSyntaxNode Body
|
||||
{
|
||||
get
|
||||
{
|
||||
var red = this.GetRed(ref this._body!, 3);
|
||||
return red is null ? throw new System.Exception("body cannot be null.") : (SyntaxNodeOrTokenList)red;
|
||||
return red is null ? throw new System.Exception("body cannot be null.") : (BlockStatementSyntaxNode)red;
|
||||
}
|
||||
}
|
||||
|
||||
@ -448,12 +480,12 @@ namespace Parser
|
||||
}
|
||||
}
|
||||
|
||||
public SyntaxNodeOrTokenList Body
|
||||
public BlockStatementSyntaxNode Body
|
||||
{
|
||||
get
|
||||
{
|
||||
var red = this.GetRed(ref this._body!, 3);
|
||||
return red is null ? throw new System.Exception("body cannot be null.") : (SyntaxNodeOrTokenList)red;
|
||||
return red is null ? throw new System.Exception("body cannot be null.") : (BlockStatementSyntaxNode)red;
|
||||
}
|
||||
}
|
||||
|
||||
@ -488,12 +520,12 @@ namespace Parser
|
||||
}
|
||||
}
|
||||
|
||||
public SyntaxNodeOrTokenList Body
|
||||
public BlockStatementSyntaxNode Body
|
||||
{
|
||||
get
|
||||
{
|
||||
var red = this.GetRed(ref this._body!, 1);
|
||||
return red is null ? throw new System.Exception("body cannot be null.") : (SyntaxNodeOrTokenList)red;
|
||||
return red is null ? throw new System.Exception("body cannot be null.") : (BlockStatementSyntaxNode)red;
|
||||
}
|
||||
}
|
||||
|
||||
@ -558,12 +590,12 @@ namespace Parser
|
||||
}
|
||||
}
|
||||
|
||||
public SyntaxNodeOrTokenList Body
|
||||
public BlockStatementSyntaxNode Body
|
||||
{
|
||||
get
|
||||
{
|
||||
var red = this.GetRed(ref this._body!, 3);
|
||||
return red is null ? throw new System.Exception("body cannot be null.") : (SyntaxNodeOrTokenList)red;
|
||||
return red is null ? throw new System.Exception("body cannot be null.") : (BlockStatementSyntaxNode)red;
|
||||
}
|
||||
}
|
||||
|
||||
@ -644,12 +676,12 @@ namespace Parser
|
||||
}
|
||||
}
|
||||
|
||||
public SyntaxNodeOrTokenList Body
|
||||
public BlockStatementSyntaxNode Body
|
||||
{
|
||||
get
|
||||
{
|
||||
var red = this.GetRed(ref this._body!, 3);
|
||||
return red is null ? throw new System.Exception("body cannot be null.") : (SyntaxNodeOrTokenList)red;
|
||||
return red is null ? throw new System.Exception("body cannot be null.") : (BlockStatementSyntaxNode)red;
|
||||
}
|
||||
}
|
||||
|
||||
@ -783,12 +815,12 @@ namespace Parser
|
||||
}
|
||||
}
|
||||
|
||||
public SyntaxNodeOrTokenList TryBody
|
||||
public BlockStatementSyntaxNode TryBody
|
||||
{
|
||||
get
|
||||
{
|
||||
var red = this.GetRed(ref this._tryBody!, 1);
|
||||
return red is null ? throw new System.Exception("tryBody cannot be null.") : (SyntaxNodeOrTokenList)red;
|
||||
return red is null ? throw new System.Exception("tryBody cannot be null.") : (BlockStatementSyntaxNode)red;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1935,12 +1967,12 @@ namespace Parser
|
||||
}
|
||||
}
|
||||
|
||||
public SyntaxNodeOrTokenList Body
|
||||
public BlockStatementSyntaxNode Body
|
||||
{
|
||||
get
|
||||
{
|
||||
var red = this.GetRed(ref this._body!, 5);
|
||||
return red is null ? throw new System.Exception("body cannot be null.") : (SyntaxNodeOrTokenList)red;
|
||||
return red is null ? throw new System.Exception("body cannot be null.") : (BlockStatementSyntaxNode)red;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8,6 +8,11 @@ namespace Parser
|
||||
DefaultVisit(node);
|
||||
}
|
||||
|
||||
public virtual void VisitBlockStatement(BlockStatementSyntaxNode node)
|
||||
{
|
||||
DefaultVisit(node);
|
||||
}
|
||||
|
||||
public virtual void VisitFunctionDeclaration(FunctionDeclarationSyntaxNode node)
|
||||
{
|
||||
DefaultVisit(node);
|
||||
|
@ -142,6 +142,10 @@
|
||||
// result = abstractMethod(object)
|
||||
AbstractMethodDeclaration,
|
||||
|
||||
// statement1
|
||||
// statement2;
|
||||
BlockStatement,
|
||||
|
||||
// classdef MyClass < BaseClass, AnotherBaseClass
|
||||
// properties
|
||||
// y
|
||||
|
Loading…
x
Reference in New Issue
Block a user