mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
The `Stmt` and `Expr` classes had both `dump` and `print` methods that behaved similarly, making it unclear what each method was for. Following a conversation in https://forums.swift.org/t/unifying-printing-logic-in-astdumper/15995/6 the `dump` methods will be used to print the S-Expression-like ASTs, and the `print` methods will be used to print the more textual ASTPrinter-based representations. The `Stmt` and `Expr` classes seem to be where this distinction was more ambiguous. These changes should fix that ambiguity. A few other classes also have `print` methods used to print straightforward representations that are neither the S-Expressions nor ASTPrinters. These were left as they are, as they don't cause the same ambiguity. It should be noted that the ASTPrinter implementations themselves haven't yet been finished and aren't a part of these changes.
69 lines
2.1 KiB
C++
69 lines
2.1 KiB
C++
//===--- 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<syntax::SyntaxData> FromNode,
|
|
ASTNode ToNode) {
|
|
if (FromNode->getKind() == SyntaxKind::Unknown) {
|
|
return;
|
|
}
|
|
|
|
SyntaxMap[FromNode] = ToNode;
|
|
}
|
|
|
|
|
|
llvm::Optional<ASTNode>
|
|
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<Expr *>()) {
|
|
SemanticNode.get<Expr *>()->dump(llvm::errs());
|
|
llvm::errs() << "\n";
|
|
} else if (SemanticNode.is<Decl *>()) {
|
|
SemanticNode.get<Decl *>()->dump(llvm::errs());
|
|
} else if (SemanticNode.is<Expr *>()) {
|
|
SemanticNode.get<Expr *>()->dump(llvm::errs());
|
|
llvm::errs() << "\n";
|
|
} else {
|
|
llvm_unreachable("ASTNode has pointer to unknown thing!");
|
|
}
|
|
llvm::errs() << "\n=====================================================\n";
|
|
}
|
|
}
|