%{ # -*- mode: C++ -*- from gyb_syntax_support import * NODE_MAP = create_node_map() # Ignore the following admonition; it applies to the resulting .cpp file only }% //// Automatically Generated From SyntaxBuilders.cpp.gyb. //// Do Not Edit Directly! //===------------ SyntaxBuilders.cpp - Syntax Builder 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 // //===----------------------------------------------------------------------===// #include "swift/Syntax/SyntaxBuilders.h" using namespace swift; using namespace swift::syntax; % for node in SYNTAX_NODES: % if node.is_buildable(): % for child in node.children: ${node.name}Builder & ${node.name}Builder::use${child.name}(${child.type_name} ${child.name}) { Layout[cursorIndex(${node.name}::Cursor::${child.name})] = ${child.name}.getRaw(); return *this; } % 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 & ${node.name}Builder::add${child_elt}(${child_elt_type} ${child_elt}) { auto &raw = Layout[cursorIndex(${node.name}::Cursor::${child.name})]; raw = raw->append(${child_elt}.getRaw()); return *this; } % end % end ${node.name} ${node.name}Builder::build() { auto raw = RawSyntax::make(SyntaxKind::${node.syntax_kind}, Layout, SourcePresence::Present); return make<${node.name}>(raw); } % end % end