| |
| %{ |
| # -*- 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})]; |
| if (!raw) |
| raw = RawSyntax::make(SyntaxKind::${child_node.syntax_kind}, |
| {${child_elt}.getRaw()}, |
| SourcePresence::Present, Arena); |
| else |
| raw = raw->append(${child_elt}.getRaw()); |
| return *this; |
| } |
| % end |
| % end |
| ${node.name} |
| ${node.name}Builder::build() { |
| % if node.children: |
| % for (idx, child) in enumerate(node.children): |
| % if not child.is_optional: |
| if (!Layout[${idx}]) |
| Layout[${idx}] = ${make_missing_child(child)}; |
| % end |
| % end |
| % end |
| auto raw = RawSyntax::make(SyntaxKind::${node.syntax_kind}, |
| Layout, SourcePresence::Present, Arena); |
| return make<${node.name}>(raw); |
| } |
| |
| % end |
| % end |