Explorar o código

Rename StartSubtree -> GetSubtreeStartPosition.

This function doesn't actually start a subtree, it just remembers a
position from which we could start a subtree.
Richard Smith %!s(int64=5) %!d(string=hai) anos
pai
achega
a3614f153b
Modificáronse 2 ficheiros con 21 adicións e 20 borrados
  1. 16 16
      parser/parser_impl.cpp
  2. 5 4
      parser/parser_impl.h

+ 16 - 16
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<int>(tree.node_impls.size())};
 }
 
@@ -379,7 +379,7 @@ auto ParseTree::Parser::ParseParenList(ListElementParser list_element_parser,
 auto ParseTree::Parser::ParseFunctionParameter() -> llvm::Optional<Node> {
   // 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<Node> {
 }
 
 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<Node> {
 
 auto ParseTree::Parser::ParseParenExpression() -> llvm::Optional<Node> {
   // `(` 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<Node> {
-  auto start = StartSubtree();
+  auto start = GetSubtreeStartPosition();
   llvm::Optional<Node> expression = ParsePrimaryExpression();
 
   while (true) {
@@ -679,7 +679,7 @@ auto ParseTree::Parser::ParsePostfixExpression() -> llvm::Optional<Node> {
 
 auto ParseTree::Parser::ParseOperatorExpression(
     PrecedenceGroup ambient_precedence) -> llvm::Optional<Node> {
-  auto start = StartSubtree();
+  auto start = GetSubtreeStartPosition();
 
   llvm::Optional<Node> lhs;
   PrecedenceGroup lhs_precedence = PrecedenceGroup::ForPostfixExpression();
@@ -746,7 +746,7 @@ auto ParseTree::Parser::ParseExpression() -> llvm::Optional<Node> {
 
 auto ParseTree::Parser::ParseExpressionStatement() -> llvm::Optional<Node> {
   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<Node> {
 auto ParseTree::Parser::ParseParenCondition(TokenKind introducer)
     -> llvm::Optional<Node> {
   // `(` expression `)`
-  auto start = StartSubtree();
+  auto start = GetSubtreeStartPosition();
   auto open_paren = ConsumeIf(TokenKind::OpenParen());
   if (!open_paren) {
     emitter.EmitError<ExpectedParenAfter>(*position,
@@ -796,7 +796,7 @@ auto ParseTree::Parser::ParseParenCondition(TokenKind introducer)
 }
 
 auto ParseTree::Parser::ParseIfStatement() -> llvm::Optional<Node> {
-  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<Node> {
 }
 
 auto ParseTree::Parser::ParseWhileStatement() -> llvm::Optional<Node> {
-  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;

+ 5 - 4
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.