//===--- SyntaxASTMap.cpp - Syntax -> AST Map manager ---------------------===// // // 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/AST/SyntaxASTMap.h" #include "swift/AST/Expr.h" #include "swift/AST/Decl.h" #include "swift/AST/Stmt.h" #include "swift/Syntax/Syntax.h" using namespace swift; using namespace swift::syntax; void SyntaxASTMap::recordSyntaxMapping(RC FromNode, ASTNode ToNode) { if (FromNode->getKind() == SyntaxKind::Unknown) { return; } SyntaxMap[FromNode] = ToNode; } llvm::Optional SyntaxASTMap::getNodeForSyntax(syntax::Syntax SyntaxNode) const { auto Found = SyntaxMap.find(SyntaxNode.Root); if (Found == SyntaxMap.end()) { return None; } return Found->getSecond(); } void SyntaxASTMap::clearSyntaxMap() { SyntaxMap.shrink_and_clear(); } void SyntaxASTMap::dumpSyntaxMap() const { for (const auto &SyntaxAndSemaNode : SyntaxMap) { auto SyntaxNode = SyntaxAndSemaNode.getFirst(); auto SemanticNode = SyntaxAndSemaNode.getSecond(); llvm::errs() << "\n=====================================================\n"; SyntaxNode->dump(llvm::errs()); llvm::errs() << "\n\n---- Maps to semantic node: ----\n\n"; if (SemanticNode.is()) { SemanticNode.get()->dump(llvm::errs()); llvm::errs() << "\n"; } else if (SemanticNode.is()) { SemanticNode.get()->dump(llvm::errs()); } else if (SemanticNode.is()) { SemanticNode.get()->dump(llvm::errs()); llvm::errs() << "\n"; } else { llvm_unreachable("ASTNode has pointer to unknown thing!"); } llvm::errs() << "\n=====================================================\n"; } }