| //===--- SyntaxData.cpp - Swift Syntax Data Implementation ----------------===// |
| // |
| // 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/DeclSyntax.h" |
| #include "swift/Syntax/ExprSyntax.h" |
| #include "swift/Syntax/GenericSyntax.h" |
| #include "swift/Syntax/TypeSyntax.h" |
| #include "swift/Syntax/StmtSyntax.h" |
| #include "swift/Syntax/UnknownSyntax.h" |
| |
| using namespace swift; |
| using namespace swift::syntax; |
| |
| RC<SyntaxData> SyntaxData::make(RC<RawSyntax> Raw, |
| const SyntaxData *Parent, |
| CursorIndex IndexInParent) { |
| return RC<SyntaxData> { |
| new SyntaxData(Raw, Parent, IndexInParent) |
| }; |
| } |
| |
| RC<SyntaxData> SyntaxData::makeDataFromRaw(RC<RawSyntax> Raw, |
| const SyntaxData *Parent, |
| CursorIndex IndexInParent) { |
| switch (Raw->Kind) { |
| #define SYNTAX(Id, ParentType) \ |
| case SyntaxKind::Id: \ |
| return Id##SyntaxData::make(Raw, Parent, IndexInParent); |
| |
| #define MISSING_SYNTAX(Id, ParentType) \ |
| case SyntaxKind::Id: \ |
| return ParentType##Data::make(Raw, Parent, IndexInParent); |
| |
| #include "swift/Syntax/SyntaxKinds.def" |
| case SyntaxKind::Token: |
| llvm_unreachable("Can't make a SyntaxData from a Token!"); |
| } |
| } |
| |
| bool SyntaxData::isType() const { |
| return Raw->isType(); |
| } |
| |
| bool SyntaxData::isStmt() const { |
| return Raw->isStmt(); |
| } |
| |
| bool SyntaxData::isDecl() const { |
| return Raw->isDecl(); |
| } |
| |
| bool SyntaxData::isExpr() const { |
| return Raw->isExpr(); |
| } |
| |
| bool SyntaxData::isUnknown() const { |
| return Raw->isUnknown(); |
| } |
| |
| void SyntaxData::dump(llvm::raw_ostream &OS) const { |
| Raw->dump(OS, 0); |
| } |