From a3614f153b38b25028f915263dc194e94f2375ef Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 21 Apr 2021 16:37:14 -0700 Subject: [PATCH] Rename StartSubtree -> GetSubtreeStartPosition. This function doesn't actually start a subtree, it just remembers a position from which we could start a subtree. --- parser/parser_impl.cpp | 32 ++++++++++++++++---------------- parser/parser_impl.h | 9 +++++---- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/parser/parser_impl.cpp b/parser/parser_impl.cpp index aeb1e6388d54..004ff8d471c6 100644 --- a/parser/parser_impl.cpp +++ b/parser/parser_impl.cpp @@ -209,7 +209,7 @@ struct ParseTree::Parser::SubtreeStart { int tree_size; }; -auto ParseTree::Parser::StartSubtree() -> SubtreeStart { +auto ParseTree::Parser::GetSubtreeStartPosition() -> SubtreeStart { return {static_cast(tree.node_impls.size())}; } @@ -379,7 +379,7 @@ auto ParseTree::Parser::ParseParenList(ListElementParser list_element_parser, auto ParseTree::Parser::ParseFunctionParameter() -> llvm::Optional { // A parameter is of the form // type identifier - auto start = StartSubtree(); + auto start = GetSubtreeStartPosition(); auto type = ParseType(); @@ -396,7 +396,7 @@ auto ParseTree::Parser::ParseFunctionParameter() -> llvm::Optional { } auto ParseTree::Parser::ParseFunctionSignature() -> bool { - auto start = StartSubtree(); + auto start = GetSubtreeStartPosition(); auto params = ParseParenList( [&] { return ParseFunctionParameter(); }, @@ -408,7 +408,7 @@ auto ParseTree::Parser::ParseFunctionSignature() -> bool { has_errors); }); - auto start_return_type = StartSubtree(); + auto start_return_type = GetSubtreeStartPosition(); if (auto arrow = ConsumeIf(TokenKind::MinusGreater())) { auto return_type = ParseType(); AddNode(ParseNodeKind::ReturnType(), *arrow, start_return_type, @@ -423,7 +423,7 @@ auto ParseTree::Parser::ParseFunctionSignature() -> bool { auto ParseTree::Parser::ParseCodeBlock() -> Node { TokenizedBuffer::Token open_curly = Consume(TokenKind::OpenCurlyBrace()); - auto start = StartSubtree(); + auto start = GetSubtreeStartPosition(); bool has_errors = false; @@ -450,7 +450,7 @@ auto ParseTree::Parser::ParseCodeBlock() -> Node { auto ParseTree::Parser::ParseFunctionDeclaration() -> Node { TokenizedBuffer::Token function_intro_token = Consume(TokenKind::FnKeyword()); - auto start = StartSubtree(); + auto start = GetSubtreeStartPosition(); auto add_error_function_node = [&] { return AddNode(ParseNodeKind::FunctionDeclaration(), function_intro_token, @@ -509,7 +509,7 @@ auto ParseTree::Parser::ParseFunctionDeclaration() -> Node { auto ParseTree::Parser::ParseVariableDeclaration() -> Node { // `var` expression identifier [= expression] `;` TokenizedBuffer::Token var_token = Consume(TokenKind::VarKeyword()); - auto start = StartSubtree(); + auto start = GetSubtreeStartPosition(); auto type = ParseType(); @@ -522,7 +522,7 @@ auto ParseTree::Parser::ParseVariableDeclaration() -> Node { } } - auto start_init = StartSubtree(); + auto start_init = GetSubtreeStartPosition(); if (auto equal_token = ConsumeIf(TokenKind::Equal())) { auto init = ParseExpression(); AddNode(ParseNodeKind::VariableInitializer(), *equal_token, start_init, @@ -580,7 +580,7 @@ auto ParseTree::Parser::ParseDeclaration() -> llvm::Optional { auto ParseTree::Parser::ParseParenExpression() -> llvm::Optional { // `(` expression `)` - auto start = StartSubtree(); + auto start = GetSubtreeStartPosition(); TokenizedBuffer::Token open_paren = Consume(TokenKind::OpenParen()); // TODO: If the next token is a close paren, build an empty tuple literal. @@ -657,7 +657,7 @@ auto ParseTree::Parser::ParseCallExpression(SubtreeStart start, bool has_errors) } auto ParseTree::Parser::ParsePostfixExpression() -> llvm::Optional { - auto start = StartSubtree(); + auto start = GetSubtreeStartPosition(); llvm::Optional expression = ParsePrimaryExpression(); while (true) { @@ -679,7 +679,7 @@ auto ParseTree::Parser::ParsePostfixExpression() -> llvm::Optional { auto ParseTree::Parser::ParseOperatorExpression( PrecedenceGroup ambient_precedence) -> llvm::Optional { - auto start = StartSubtree(); + auto start = GetSubtreeStartPosition(); llvm::Optional lhs; PrecedenceGroup lhs_precedence = PrecedenceGroup::ForPostfixExpression(); @@ -746,7 +746,7 @@ auto ParseTree::Parser::ParseExpression() -> llvm::Optional { auto ParseTree::Parser::ParseExpressionStatement() -> llvm::Optional { TokenizedBuffer::Token start_token = *position; - auto start = StartSubtree(); + auto start = GetSubtreeStartPosition(); bool has_errors = !ParseExpression(); @@ -774,7 +774,7 @@ auto ParseTree::Parser::ParseExpressionStatement() -> llvm::Optional { auto ParseTree::Parser::ParseParenCondition(TokenKind introducer) -> llvm::Optional { // `(` expression `)` - auto start = StartSubtree(); + auto start = GetSubtreeStartPosition(); auto open_paren = ConsumeIf(TokenKind::OpenParen()); if (!open_paren) { emitter.EmitError(*position, @@ -796,7 +796,7 @@ auto ParseTree::Parser::ParseParenCondition(TokenKind introducer) } auto ParseTree::Parser::ParseIfStatement() -> llvm::Optional { - auto start = StartSubtree(); + auto start = GetSubtreeStartPosition(); auto if_token = Consume(TokenKind::IfKeyword()); auto cond = ParseParenCondition(TokenKind::IfKeyword()); auto then_case = ParseStatement(); @@ -810,7 +810,7 @@ auto ParseTree::Parser::ParseIfStatement() -> llvm::Optional { } auto ParseTree::Parser::ParseWhileStatement() -> llvm::Optional { - auto start = StartSubtree(); + auto start = GetSubtreeStartPosition(); auto while_token = Consume(TokenKind::WhileKeyword()); auto cond = ParseParenCondition(TokenKind::WhileKeyword()); auto body = ParseStatement(); @@ -824,7 +824,7 @@ auto ParseTree::Parser::ParseKeywordStatement(ParseNodeKind kind, auto keyword_kind = NextTokenKind(); assert(keyword_kind.IsKeyword()); - auto start = StartSubtree(); + auto start = GetSubtreeStartPosition(); auto keyword = Consume(keyword_kind); bool arg_error = false; diff --git a/parser/parser_impl.h b/parser/parser_impl.h index 1f418757d742..bbb6e4cd7365 100644 --- a/parser/parser_impl.h +++ b/parser/parser_impl.h @@ -71,11 +71,12 @@ class ParseTree::Parser { // a node with a parse error. auto MarkNodeError(Node n) -> void; - // Start parsing one (or more) subtrees of nodes. + // Tracks the current location as a potential start of a subtree. // - // This returns a marker representing start position. Multiple nodes can be - // added if they share a start position. - auto StartSubtree() -> SubtreeStart; + // This returns a marker representing the current position, which can later + // be used in a call to `AddNode` to mark all nodes created since this + // position as children of the added node. + auto GetSubtreeStartPosition() -> SubtreeStart; // Add a node to the parse tree that potentially has a subtree larger than // itself.