%{ from gyb_syntax_support import * # -*- mode: C++ -*- # Ignore the following admonition; it applies to the resulting .h file only }% //// Automatically Generated From ParsedSyntaxNodes.h.gyb. //// Do Not Edit Directly! //===--- ParsedSyntaxNodes.h - Parsed Syntax Node definitions -------------===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2014 - 2019 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See https://swift.org/LICENSE.txt for license information // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // //===----------------------------------------------------------------------===// #ifndef SWIFT_PARSE_PARSEDSYNTAXNODES_H #define SWIFT_PARSE_PARSEDSYNTAXNODES_H #include "swift/Parse/ParsedSyntax.h" #include "swift/Syntax/SyntaxKind.h" namespace swift { % # Emit the non-collection classes first, then emit the collection classes % # that reference these classes. % for node in SYNTAX_NODES: % if not node.is_syntax_collection(): class Parsed${node.name}; % end % end % for node in SYNTAX_NODES: % if node.is_syntax_collection(): using Parsed${node.name} = ParsedSyntaxCollection; % end % end % for node in SYNTAX_NODES: % if not node.is_syntax_collection(): % qualifier = "" if node.is_base() else "final" % for line in dedented_lines(node.description): /// ${line} % end class Parsed${node.name} ${qualifier} : public Parsed${node.base_type} { % if node.is_buildable(): friend class Parsed${node.name}Builder; % end public: explicit Parsed${node.name}(ParsedRawSyntaxNode &&rawNode) : Parsed${node.base_type}(std::move(rawNode)) { } % for child in node.children: % for line in dedented_lines(child.description): /// ${line} % end % if child.is_optional: llvm::Optional getDeferred${child.name}( const SyntaxParsingContext *SyntaxContext ); % else: Parsed${child.type_name} getDeferred${child.name}( const SyntaxParsingContext *SyntaxContext ); % end % end static bool kindof(syntax::SyntaxKind Kind) { % if node.is_base(): return is${node.syntax_kind}Kind(Kind); % else: return Kind == syntax::SyntaxKind::${node.syntax_kind}; % end } static bool classof(const ParsedSyntax *S) { return kindof(S->getKind()); } }; % end % end } #endif // SWIFT_PARSE_PARSEDSYNTAXNODES_H