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