%{ # -*- mode: C++ -*- from gyb_syntax_support import * NODE_MAP = create_node_map() # Ignore the following admonition; it applies to the resulting .h file only }% //// Automatically Generated From SyntaxBuilders.h.gyb. //// Do Not Edit Directly! //===------------- SyntaxBuilders.h - Syntax Node definitions -------------===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2014 - 2017 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_SYNTAX_BUILDERS_H #define SWIFT_SYNTAX_BUILDERS_H #include "swift/Syntax/RawSyntax.h" #include "swift/Syntax/SyntaxNodes.h" namespace swift { namespace syntax { class SyntaxArena; % for node in SYNTAX_NODES: % if node.is_buildable(): % child_count = len(node.children) class ${node.name}Builder { SyntaxArena *Arena = nullptr; RC Layout[${child_count}] = { % for child in node.children: nullptr, % end }; public: ${node.name}Builder() = default; ${node.name}Builder(SyntaxArena &Arena) : Arena(&Arena) {} % for child in node.children: ${node.name}Builder &use${child.name}(${child.type_name} ${child.name}); % child_node = NODE_MAP.get(child.syntax_kind) % if child_node and child_node.is_syntax_collection(): % child_elt = child_node.collection_element_name % child_elt_type = child_node.collection_element_type ${node.name}Builder &add${child_elt}(${child_elt_type} ${child_elt}); % end % end ${node.name} build(); }; % end % end } } #endif // SWIFT_SYNTAX_BUILDERS_H