| %{ |
| # -*- 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 ParsedSyntaxBuilders.h.gyb. |
| //// Do Not Edit Directly! |
| //===------------- ParsedSyntaxBuilders.h - Parsed Syntax Building --------===// |
| // |
| // 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_PARSEDSYNTAXBUILDERS_H |
| #define SWIFT_PARSE_PARSEDSYNTAXBUILDERS_H |
| |
| #include "swift/Parse/ParsedRawSyntaxNode.h" |
| #include "swift/Parse/ParsedSyntaxNodes.h" |
| #include "swift/Parse/SyntaxParsingContext.h" |
| |
| namespace swift { |
| |
| class ParsedRawSyntaxRecorder; |
| class SyntaxParsingContext; |
| |
| % for node in SYNTAX_NODES: |
| % if node.is_buildable(): |
| % child_count = len(node.children) |
| class Parsed${node.name}Builder { |
| SyntaxParsingContext &SPCtx; |
| ParsedRawSyntaxNode Layout[${child_count}]; |
| % for child in node.children: |
| % 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 |
| SmallVector<ParsedRawSyntaxNode, 8> ${child_elt}Nodes; |
| % end |
| % end |
| |
| public: |
| explicit Parsed${node.name}Builder(SyntaxParsingContext &SPCtx) |
| : SPCtx(SPCtx) {} |
| |
| % for child in node.children: |
| Parsed${node.name}Builder &use${child.name}(Parsed${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 |
| Parsed${node.name}Builder &add${child_elt}(Parsed${child_elt_type} ${child_elt}); |
| % end |
| % end |
| |
| Parsed${node.name} build(); |
| Parsed${node.name} makeDeferred(); |
| |
| private: |
| Parsed${node.name} record(); |
| void finishLayout(bool deferred); |
| }; |
| |
| % end |
| % end |
| |
| } |
| |
| #endif // SWIFT_PARSE_PARSEDSYNTAXBUILDERS_H |