Files
carbon-lang/toolchain/parser/parse_node_kind.def
T
Jon Ross-Perkins b914f46ec5 Change keyword statements to bracket arguments. (#2394)
This changes `return`, `break`, and `continue` to treat the keyword as the "start" and semicolon as the "parent", essentially bracketing the keyword.

Pragmatically this is focusing on making `return` work with only one ParseNodeKind: because `return` and `;` now bracket the expression, we can tightly determine whether the `return` has arguments without looking at subtree size. However, it's possible that `break` and `continue` may in the future take some kind of label as an argument, so the consistency seems beneficial there too.

Note this eliminates the StatementEnd ParseNodeKind, as it's obsolete with this change.
2022-11-15 22:42:54 -08:00

87 lines
3.0 KiB
Modula-2

// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
// Exceptions. See /LICENSE for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
// Note that this is an X-macro header.
//
// It does not use `#include` guards, and instead is designed to be `#include`ed
// after the x-macro is defined in order for its inclusion to expand to the
// desired output. The x-macro for this header is `CARBON_PARSE_NODE_KIND`. The
// definition provided will be removed at the end of this file to clean up.
#ifndef CARBON_PARSE_NODE_KIND
#error "Must define the x-macro to use this file."
#endif
// Declarations.
CARBON_PARSE_NODE_KIND(DeclarationEnd)
CARBON_PARSE_NODE_KIND(EmptyDeclaration)
CARBON_PARSE_NODE_KIND(DeclaredName)
CARBON_PARSE_NODE_KIND(PackageDirective)
CARBON_PARSE_NODE_KIND(PackageApi)
CARBON_PARSE_NODE_KIND(PackageImpl)
CARBON_PARSE_NODE_KIND(PackageLibrary)
CARBON_PARSE_NODE_KIND(PackageEnd)
CARBON_PARSE_NODE_KIND(FunctionIntroducer)
CARBON_PARSE_NODE_KIND(FunctionDeclaration)
CARBON_PARSE_NODE_KIND(FunctionDefinition)
CARBON_PARSE_NODE_KIND(FunctionDefinitionStart)
CARBON_PARSE_NODE_KIND(ParameterList)
CARBON_PARSE_NODE_KIND(ParameterListEnd)
CARBON_PARSE_NODE_KIND(ParameterListComma)
CARBON_PARSE_NODE_KIND(PatternBinding)
CARBON_PARSE_NODE_KIND(ReturnType)
CARBON_PARSE_NODE_KIND(VariableDeclaration)
CARBON_PARSE_NODE_KIND(VariableInitializer)
CARBON_PARSE_NODE_KIND(FileEnd)
// Statements.
CARBON_PARSE_NODE_KIND(CodeBlock)
CARBON_PARSE_NODE_KIND(CodeBlockStart)
CARBON_PARSE_NODE_KIND(ExpressionStatement)
CARBON_PARSE_NODE_KIND(IfStatement)
CARBON_PARSE_NODE_KIND(IfStatementElse)
CARBON_PARSE_NODE_KIND(WhileStatement)
CARBON_PARSE_NODE_KIND(Condition)
CARBON_PARSE_NODE_KIND(ConditionEnd)
CARBON_PARSE_NODE_KIND(ContinueStatement)
CARBON_PARSE_NODE_KIND(ContinueStatementStart)
CARBON_PARSE_NODE_KIND(BreakStatement)
CARBON_PARSE_NODE_KIND(BreakStatementStart)
CARBON_PARSE_NODE_KIND(ReturnStatement)
CARBON_PARSE_NODE_KIND(ReturnStatementStart)
CARBON_PARSE_NODE_KIND(ForStatement)
CARBON_PARSE_NODE_KIND(ForHeader)
CARBON_PARSE_NODE_KIND(ForHeaderEnd)
CARBON_PARSE_NODE_KIND(ForIn)
// Expressions.
CARBON_PARSE_NODE_KIND(Literal)
CARBON_PARSE_NODE_KIND(TupleLiteral)
CARBON_PARSE_NODE_KIND(TupleLiteralComma)
CARBON_PARSE_NODE_KIND(TupleLiteralEnd)
CARBON_PARSE_NODE_KIND(NameReference)
CARBON_PARSE_NODE_KIND(ParenExpression)
CARBON_PARSE_NODE_KIND(ParenExpressionEnd)
CARBON_PARSE_NODE_KIND(DesignatorExpression)
CARBON_PARSE_NODE_KIND(DesignatedName)
CARBON_PARSE_NODE_KIND(CallExpression)
CARBON_PARSE_NODE_KIND(CallExpressionComma)
CARBON_PARSE_NODE_KIND(CallExpressionEnd)
CARBON_PARSE_NODE_KIND(PrefixOperator)
CARBON_PARSE_NODE_KIND(InfixOperator)
CARBON_PARSE_NODE_KIND(PostfixOperator)
// Struct literals.
CARBON_PARSE_NODE_KIND(StructLiteral)
CARBON_PARSE_NODE_KIND(StructTypeLiteral)
CARBON_PARSE_NODE_KIND(StructFieldDesignator)
CARBON_PARSE_NODE_KIND(StructFieldValue)
CARBON_PARSE_NODE_KIND(StructFieldType)
CARBON_PARSE_NODE_KIND(StructComma)
CARBON_PARSE_NODE_KIND(StructEnd)
#undef CARBON_PARSE_NODE_KIND