| Index: tools/clang/BindMigrate/Transform.cpp
|
| diff --git a/tools/clang/BindMigrate/Transform.cpp b/tools/clang/BindMigrate/Transform.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..710482f7c77e8b28af1f59995af1f6d4761ea6f9
|
| --- /dev/null
|
| +++ b/tools/clang/BindMigrate/Transform.cpp
|
| @@ -0,0 +1,99 @@
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "Transform.h"
|
| +
|
| +#include "clang/Basic/FileManager.h"
|
| +
|
| +namespace clang {
|
| +
|
| +TransformApplier::TransformApplier(const Transform::TransformList& transforms)
|
| + : transforms_(transforms) {
|
| +}
|
| +
|
| +bool TransformApplier::VisitStmt(Stmt *statement) {
|
| + for (Transform::TransformList::iterator it = transforms_.begin(),
|
| + end = transforms_.end(); it != end; ++it) {
|
| + if ((*it)->WouldTransformStmt(statement)) {
|
| + (*it)->TransformStmt(statement);
|
| + }
|
| + }
|
| +
|
| + return RecursiveASTVisitor<TransformApplier>::VisitStmt(statement);
|
| +}
|
| +
|
| +bool TransformApplier::VisitDecl(Decl *decl) {
|
| + for (Transform::TransformList::iterator it = transforms_.begin(),
|
| + end = transforms_.end(); it != end; ++it) {
|
| + if ((*it)->WouldTransformDecl(decl)) {
|
| + (*it)->TransformDecl(decl);
|
| + }
|
| + }
|
| +
|
| + return RecursiveASTVisitor<TransformApplier>::VisitDecl(decl);
|
| +}
|
| +
|
| +bool TransformApplier::VisitType(Type* type) {
|
| + for (Transform::TransformList::iterator it = transforms_.begin(),
|
| + end = transforms_.end(); it != end; ++it) {
|
| + if ((*it)->WouldTransformType(type)) {
|
| + (*it)->TransformType(type);
|
| + }
|
| + }
|
| +
|
| + return RecursiveASTVisitor<TransformApplier>::VisitType(type);
|
| +}
|
| +
|
| +TransformCandidatePrinter::TransformCandidatePrinter(
|
| + const Transform::TransformList& transforms,
|
| + SourceManager* source_manager)
|
| + : transforms_(transforms),
|
| + source_manager_(source_manager) {
|
| +}
|
| +
|
| +TransformCandidatePrinter::~TransformCandidatePrinter() {
|
| + for (std::set<std::string>::const_iterator it = filenames_.begin();
|
| + it != filenames_.end(); ++it) {
|
| + llvm::outs() << *it << "\n";
|
| + }
|
| +}
|
| +
|
| +bool TransformCandidatePrinter::VisitStmt(Stmt *statement) {
|
| + for (Transform::TransformList::iterator it = transforms_.begin(),
|
| + end = transforms_.end(); it != end; ++it) {
|
| + if ((*it)->WouldTransformStmt(statement)) {
|
| + AddFileForLocation(statement->getLocStart());
|
| + }
|
| + }
|
| +
|
| + return RecursiveASTVisitor<TransformCandidatePrinter>::VisitStmt(
|
| + statement);
|
| +}
|
| +
|
| +bool TransformCandidatePrinter::VisitDecl(Decl *decl) {
|
| + for (Transform::TransformList::iterator it = transforms_.begin(),
|
| + end = transforms_.end(); it != end; ++it) {
|
| + if ((*it)->WouldTransformDecl(decl)) {
|
| + AddFileForLocation(decl->getLocStart());
|
| + }
|
| + }
|
| +
|
| + return RecursiveASTVisitor<TransformCandidatePrinter>::VisitDecl(decl);
|
| +}
|
| +
|
| +bool TransformCandidatePrinter::VisitType(Type* type) {
|
| + // We will find it in Decls and Statements already.
|
| + return RecursiveASTVisitor<TransformCandidatePrinter>::VisitType(type);
|
| +}
|
| +
|
| +void TransformCandidatePrinter::AddFileForLocation(SourceLocation location) {
|
| + const FileEntry* file_entry = GetValidFile(*source_manager_, location);
|
| + if (!file_entry) {
|
| + return;
|
| + }
|
| +
|
| + filenames_.insert(file_entry->getName());
|
| +}
|
| +
|
| +} // namespace clang
|
|
|