Files
swift-mirror/lib/Parse/ParsedSyntaxNodes.cpp.gyb
Argyrios Kyrtzidis ab7427723e [Parse/Syntax] Refactoring to decouple the parser from syntax tree creation
Instead of creating syntax nodes directly, modify the parser to invoke an abstract interface 'SyntaxParseActions' while it is parsing the source code.
This decouples the act of parsing from the act of forming a syntax tree representation.
'SyntaxTreeCreator' is an implementation of SyntaxParseActions that handles the logic of creating a syntax tree.
To enforce the layering separation of parsing and syntax tree creation, a static library swiftSyntaxParse is introduced to compose the two.

This decoupling is important for introducing a syntax parser library for SwiftSyntax to directly access parsing.
2019-01-07 19:52:59 -08:00

44 lines
1.4 KiB
C++

%{
from gyb_syntax_support import *
# -*- mode: C++ -*-
# Ignore the following admonition; it applies to the resulting .cpp file only
}%
//// Automatically Generated From ParsedSyntaxNodes.cpp.gyb.
//// Do Not Edit Directly!
//===--- ParsedSyntaxNodes.cpp - Parsed Syntax Node definitions -----------===//
//
// 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
//
//===----------------------------------------------------------------------===//
#include "swift/Parse/ParsedSyntaxNodes.h"
#include "swift/Syntax/SyntaxNodes.h"
using namespace swift;
using namespace swift::syntax;
% for node in SYNTAX_NODES:
% for child in node.children:
% if child.is_optional:
Optional<Parsed${child.type_name}>
Parsed${node.name}::getDeferred${child.name}() {
auto RawChild = getRaw().getDeferredChildren()[${node.name}::Cursor::${child.name}];
if (RawChild.isNull())
return None;
return Parsed${child.type_name} {RawChild};
}
% else:
Parsed${child.type_name} Parsed${node.name}::getDeferred${child.name}() {
return Parsed${child.type_name} {getRaw().getDeferredChildren()[${node.name}::Cursor::${child.name}]};
}
% end
% end
% end