//===--- SyntaxData.cpp - Swift Syntax Data Implementation ------*- C++ -*-===// // // 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" using namespace swift; using namespace swift::syntax; RC SyntaxData::make(RC Raw, const SyntaxData *Parent, CursorIndex IndexInParent) { return RC { new SyntaxData(Raw, Parent, IndexInParent) }; } RC SyntaxData::makeDataFromRaw(RC 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(); } void SyntaxData::dump(llvm::raw_ostream &OS) const { Raw->dump(OS, 0); } #pragma mark - unknown-syntax Data RC UnknownSyntaxData::make(RC Raw, const SyntaxData *Parent, CursorIndex IndexInParent) { return RC { new UnknownSyntaxData { Raw, Parent, IndexInParent } }; } bool UnknownSyntaxData::classof(const SyntaxData *SD) { return SD->getKind() == SyntaxKind::Unknown; }