| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- // 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.
- //
- // x-macros come in three forms:
- // CARBON_PARSE_NODE_KIND(Name)
- // Used as a fallback if other macros are missing.
- // CARBON_PARSE_NODE_KIND_BRACKET(Name, BracketName)
- // Defines a bracketed node kind. BracketName should refer to the node kind
- // that is the _start_ of the bracketed range.
- // CARBON_PARSE_NODE_KIND_CHILD_COUNT(Name, ChildCount)
- // Defines a parse node with a set number of children, often 0. This count
- // must be correct even when the node contains errors.
- //
- // Macro definitions will be removed at the end of this file to clean up.
- //
- // TODO: Using CHILD_COUNT(..., TodoFixParseNode) to indicate nodes which need to be fixed,
- // sometimes due to inconsistent output in error modes. This is also handled in
- // ParseNodeKind::child_count() and ParseTree::Verify(). All of that can be
- // cleaned up once remainining nodes are fixed.
- #if !(defined(CARBON_PARSE_NODE_KIND) || \
- (defined(CARBON_PARSE_NODE_KIND_BRACKET) && \
- defined(CARBON_PARSE_NODE_KIND_CHILD_COUNT)))
- #error "Must define CARBON_PARSE_NODE_KIND family x-macros to use this file."
- #endif
- // The BRACKET and CHILD_COUNT macros will use CARBON_PARSE_NODE_KIND by default
- // when undefined.
- #ifndef CARBON_PARSE_NODE_KIND_BRACKET
- #define CARBON_PARSE_NODE_KIND_BRACKET(Name, ...) CARBON_PARSE_NODE_KIND(Name)
- #endif
- #ifndef CARBON_PARSE_NODE_KIND_CHILD_COUNT
- #define CARBON_PARSE_NODE_KIND_CHILD_COUNT(Name, ...) \
- CARBON_PARSE_NODE_KIND(Name)
- #endif
- // Declarations.
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(DeclarationEnd, 0)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(EmptyDeclaration, 0)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(DeclaredName, 0)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(PackageDirective, TodoFixParseNode)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(PackageApi, 0)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(PackageImpl, 0)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(PackageLibrary, 1)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(PackageEnd, 0)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(FunctionIntroducer, 0)
- CARBON_PARSE_NODE_KIND_BRACKET(FunctionDeclaration, FunctionIntroducer)
- CARBON_PARSE_NODE_KIND_BRACKET(FunctionDefinition, FunctionDefinitionStart)
- CARBON_PARSE_NODE_KIND_BRACKET(FunctionDefinitionStart, FunctionIntroducer)
- CARBON_PARSE_NODE_KIND_BRACKET(ParameterList, ParameterListStart)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(ParameterListStart, 0)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(ParameterListComma, 0)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(PatternBinding, 2)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(ReturnType, 1)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(VariableDeclaration, TodoFixParseNode)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(VariableInitializer, 1)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(FileEnd, 0)
- // Statements.
- CARBON_PARSE_NODE_KIND_BRACKET(CodeBlock, CodeBlockStart)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(CodeBlockStart, 0)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(ExpressionStatement, 1)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(IfStatement, TodoFixParseNode)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(IfStatementElse, 0)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(WhileStatement, TodoFixParseNode)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(Condition, TodoFixParseNode)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(ConditionEnd, 0)
- CARBON_PARSE_NODE_KIND_BRACKET(ContinueStatement, ContinueStatementStart)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(ContinueStatementStart, 0)
- CARBON_PARSE_NODE_KIND_BRACKET(BreakStatement, BreakStatementStart)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(BreakStatementStart, 0)
- CARBON_PARSE_NODE_KIND_BRACKET(ReturnStatement, ReturnStatementStart)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(ReturnStatementStart, 0)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(ForStatement, TodoFixParseNode)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(ForHeader, TodoFixParseNode)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(ForHeaderEnd, 0)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(ForIn, 0)
- // Expressions.
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(Literal, 0)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(TupleLiteral, TodoFixParseNode)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(TupleLiteralComma, 0)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(TupleLiteralEnd, 0)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(NameReference, 0)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(ParenExpression, TodoFixParseNode)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(ParenExpressionEnd, 0)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(DesignatorExpression, TodoFixParseNode)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(DesignatedName, 0)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(CallExpression, TodoFixParseNode)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(CallExpressionComma, 0)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(CallExpressionEnd, 0)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(PrefixOperator, 1)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(InfixOperator, 2)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(PostfixOperator, 1)
- // Struct literals.
- CARBON_PARSE_NODE_KIND_BRACKET(StructLiteral,
- StructLiteralOrStructTypeLiteralStart)
- CARBON_PARSE_NODE_KIND_BRACKET(StructTypeLiteral,
- StructLiteralOrStructTypeLiteralStart)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(StructLiteralOrStructTypeLiteralStart, 0)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(StructFieldDesignator, TodoFixParseNode)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(StructFieldValue, TodoFixParseNode)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(StructFieldType, TodoFixParseNode)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(StructComma, 0)
- // Interfaces
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(InterfaceDefinition, TodoFixParseNode)
- CARBON_PARSE_NODE_KIND_CHILD_COUNT(InterfaceBodyStart, 0)
- CARBON_PARSE_NODE_KIND_BRACKET(InterfaceBody, InterfaceBodyStart)
- #undef CARBON_PARSE_NODE_KIND
- #undef CARBON_PARSE_NODE_KIND_BRACKET
- #undef CARBON_PARSE_NODE_KIND_CHILD_COUNT
|