blob: 95d1f4e42d66781334b95d8c6a1fa39b3e06593b [file] [log] [blame]
%{
# -*- 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