diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2016-07-23 20:44:14 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2016-07-23 20:44:14 +0000 |
| commit | 2b6b257f4e5503a7a2675bdb8735693db769f75c (patch) | |
| tree | e85e046ae7003fe3bcc8b5454cd0fa3f7407b470 /lib/ARCMigrate | |
| parent | b4348ed0b7e90c0831b925fbee00b5f179a99796 (diff) | |
Notes
Diffstat (limited to 'lib/ARCMigrate')
| -rw-r--r-- | lib/ARCMigrate/ARCMT.cpp | 5 | ||||
| -rw-r--r-- | lib/ARCMigrate/ARCMTActions.cpp | 12 | ||||
| -rw-r--r-- | lib/ARCMigrate/Makefile | 18 | ||||
| -rw-r--r-- | lib/ARCMigrate/ObjCMT.cpp | 79 | ||||
| -rw-r--r-- | lib/ARCMigrate/TransProperties.cpp | 2 |
5 files changed, 46 insertions, 70 deletions
diff --git a/lib/ARCMigrate/ARCMT.cpp b/lib/ARCMigrate/ARCMT.cpp index 8c04c8371cef..da93d8418e78 100644 --- a/lib/ARCMigrate/ARCMT.cpp +++ b/lib/ARCMigrate/ARCMT.cpp @@ -21,6 +21,7 @@ #include "clang/Serialization/ASTReader.h" #include "llvm/ADT/Triple.h" #include "llvm/Support/MemoryBuffer.h" +#include <utility> using namespace clang; using namespace arcmt; @@ -508,8 +509,8 @@ MigrationProcess::MigrationProcess( const CompilerInvocation &CI, std::shared_ptr<PCHContainerOperations> PCHContainerOps, DiagnosticConsumer *diagClient, StringRef outputDir) - : OrigCI(CI), PCHContainerOps(PCHContainerOps), DiagClient(diagClient), - HadARCErrors(false) { + : OrigCI(CI), PCHContainerOps(std::move(PCHContainerOps)), + DiagClient(diagClient), HadARCErrors(false) { if (!outputDir.empty()) { IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs()); IntrusiveRefCntPtr<DiagnosticsEngine> Diags( diff --git a/lib/ARCMigrate/ARCMTActions.cpp b/lib/ARCMigrate/ARCMTActions.cpp index 39a922f426c3..0a5473ab19ec 100644 --- a/lib/ARCMigrate/ARCMTActions.cpp +++ b/lib/ARCMigrate/ARCMTActions.cpp @@ -25,8 +25,8 @@ bool CheckAction::BeginInvocation(CompilerInstance &CI) { return true; } -CheckAction::CheckAction(FrontendAction *WrappedAction) - : WrapperFrontendAction(WrappedAction) {} +CheckAction::CheckAction(std::unique_ptr<FrontendAction> WrappedAction) + : WrapperFrontendAction(std::move(WrappedAction)) {} bool ModifyAction::BeginInvocation(CompilerInstance &CI) { return !arcmt::applyTransformations(CI.getInvocation(), getCurrentInput(), @@ -34,8 +34,8 @@ bool ModifyAction::BeginInvocation(CompilerInstance &CI) { CI.getDiagnostics().getClient()); } -ModifyAction::ModifyAction(FrontendAction *WrappedAction) - : WrapperFrontendAction(WrappedAction) {} +ModifyAction::ModifyAction(std::unique_ptr<FrontendAction> WrappedAction) + : WrapperFrontendAction(std::move(WrappedAction)) {} bool MigrateAction::BeginInvocation(CompilerInstance &CI) { if (arcmt::migrateWithTemporaryFiles( @@ -49,11 +49,11 @@ bool MigrateAction::BeginInvocation(CompilerInstance &CI) { return true; } -MigrateAction::MigrateAction(FrontendAction *WrappedAction, +MigrateAction::MigrateAction(std::unique_ptr<FrontendAction> WrappedAction, StringRef migrateDir, StringRef plistOut, bool emitPremigrationARCErrors) - : WrapperFrontendAction(WrappedAction), MigrateDir(migrateDir), + : WrapperFrontendAction(std::move(WrappedAction)), MigrateDir(migrateDir), PlistOut(plistOut), EmitPremigrationARCErros(emitPremigrationARCErrors) { if (MigrateDir.empty()) MigrateDir = "."; // user current directory if none is given. diff --git a/lib/ARCMigrate/Makefile b/lib/ARCMigrate/Makefile deleted file mode 100644 index 5232c5e5aff4..000000000000 --- a/lib/ARCMigrate/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -##===- clang/lib/ARCMigrate/Makefile --------------------------*- Makefile -*-===## -# -# The LLVM Compiler Infrastructure -# -# This file is distributed under the University of Illinois Open Source -# License. See LICENSE.TXT for details. -# -##===----------------------------------------------------------------------===## -# -# This implements code transformation to ARC mode. -# -##===----------------------------------------------------------------------===## - -CLANG_LEVEL := ../.. -LIBRARYNAME := clangARCMigrate - -include $(CLANG_LEVEL)/Makefile - diff --git a/lib/ARCMigrate/ObjCMT.cpp b/lib/ARCMigrate/ObjCMT.cpp index 50b113660d3a..241a7246b621 100644 --- a/lib/ARCMigrate/ObjCMT.cpp +++ b/lib/ARCMigrate/ObjCMT.cpp @@ -177,12 +177,13 @@ protected: } }; -} +} // end anonymous namespace -ObjCMigrateAction::ObjCMigrateAction(FrontendAction *WrappedAction, +ObjCMigrateAction::ObjCMigrateAction( + std::unique_ptr<FrontendAction> WrappedAction, StringRef migrateDir, unsigned migrateAction) - : WrapperFrontendAction(WrappedAction), MigrateDir(migrateDir), + : WrapperFrontendAction(std::move(WrappedAction)), MigrateDir(migrateDir), ObjCMigAction(migrateAction), CompInst(nullptr) { if (MigrateDir.empty()) @@ -306,7 +307,6 @@ namespace { } return true; } - class ObjCMigrator : public RecursiveASTVisitor<ObjCMigrator> { ObjCMigrateASTConsumer &Consumer; @@ -369,7 +369,7 @@ public: return true; } }; -} +} // end anonymous namespace void ObjCMigrateASTConsumer::migrateDecl(Decl *D) { if (!D) @@ -588,7 +588,7 @@ void ObjCMigrateASTConsumer::migrateObjCContainerDecl(ASTContext &Ctx, if (!(ASTMigrateActions & FrontendOptions::ObjCMT_ReturnsInnerPointerProperty)) return; - for (auto *Prop : D->properties()) { + for (auto *Prop : D->instance_properties()) { if ((ASTMigrateActions & FrontendOptions::ObjCMT_Annotation) && !Prop->isDeprecated()) migratePropertyNsReturnsInnerPointer(Ctx, Prop); @@ -605,7 +605,7 @@ ClassImplementsAllMethodsAndProperties(ASTContext &Ctx, // in class interface. bool HasAtleastOneRequiredProperty = false; if (const ObjCProtocolDecl *PDecl = Protocol->getDefinition()) - for (const auto *Property : PDecl->properties()) { + for (const auto *Property : PDecl->instance_properties()) { if (Property->getPropertyImplementation() == ObjCPropertyDecl::Optional) continue; HasAtleastOneRequiredProperty = true; @@ -615,7 +615,8 @@ ClassImplementsAllMethodsAndProperties(ASTContext &Ctx, // or dynamic declaration. Class is implementing a property coming from // another protocol. This still makes the target protocol as conforming. if (!ImpDecl->FindPropertyImplDecl( - Property->getDeclName().getAsIdentifierInfo())) + Property->getDeclName().getAsIdentifierInfo(), + Property->getQueryKind())) return false; } else if (ObjCPropertyDecl *ClassProperty = dyn_cast<ObjCPropertyDecl>(R[0])) { @@ -770,23 +771,11 @@ static void rewriteToNSMacroDecl(ASTContext &Ctx, ClassString += ", "; ClassString += TypedefDcl->getIdentifier()->getName(); - ClassString += ')'; - SourceLocation EndLoc; - if (EnumDcl->getIntegerTypeSourceInfo()) { - TypeSourceInfo *TSourceInfo = EnumDcl->getIntegerTypeSourceInfo(); - TypeLoc TLoc = TSourceInfo->getTypeLoc(); - EndLoc = TLoc.getLocEnd(); - const char *lbrace = Ctx.getSourceManager().getCharacterData(EndLoc); - unsigned count = 0; - if (lbrace) - while (lbrace[count] != '{') - ++count; - if (count > 0) - EndLoc = EndLoc.getLocWithOffset(count-1); - } - else - EndLoc = EnumDcl->getLocStart(); - SourceRange R(EnumDcl->getLocStart(), EndLoc); + ClassString += ") "; + SourceLocation EndLoc = EnumDcl->getBraceRange().getBegin(); + if (EndLoc.isInvalid()) + return; + CharSourceRange R = CharSourceRange::getCharRange(EnumDcl->getLocStart(), EndLoc); commit.replace(R, ClassString); // This is to remove spaces between '}' and typedef name. SourceLocation StartTypedefLoc = EnumDcl->getLocEnd(); @@ -1104,7 +1093,6 @@ static bool AvailabilityAttrsMatch(Attr *At1, Attr *At2) { versionsMatch(Deprecated1, Deprecated2) && versionsMatch(Obsoleted1, Obsoleted2) && IsUnavailable1 == IsUnavailable2); - } static bool MatchTwoAttributeLists(const AttrVec &Attrs1, const AttrVec &Attrs2, @@ -1509,7 +1497,6 @@ void ObjCMigrateASTConsumer::AddCFAnnotations(ASTContext &Ctx, } } - ObjCMigrateASTConsumer::CF_BRIDGING_KIND ObjCMigrateASTConsumer::migrateAddFunctionAnnotation( ASTContext &Ctx, @@ -1683,7 +1670,6 @@ void ObjCMigrateASTConsumer::migrateAddMethodAnnotation( return; } } - return; } namespace { @@ -1700,7 +1686,7 @@ public: return true; } }; -} // anonymous namespace +} // end anonymous namespace static bool hasSuperInitCall(const ObjCMethodDecl *MD) { return !SuperInitChecker().TraverseStmt(MD->getBody()); @@ -1739,6 +1725,11 @@ bool ObjCMigrateASTConsumer::InsertFoundation(ASTContext &Ctx, return true; if (Loc.isInvalid()) return false; + auto *nsEnumId = &Ctx.Idents.get("NS_ENUM"); + if (PP.getMacroDefinitionAtLoc(nsEnumId, Loc)) { + FoundationIncluded = true; + return true; + } edit::Commit commit(*Editor); if (Ctx.getLangOpts().Modules) commit.insert(Loc, "#ifndef NS_ENUM\n@import Foundation;\n#endif\n"); @@ -1841,7 +1832,7 @@ private: } }; -} +} // end anonymous namespace void ObjCMigrateASTConsumer::HandleTranslationUnit(ASTContext &Ctx) { @@ -1897,18 +1888,20 @@ void ObjCMigrateASTConsumer::HandleTranslationUnit(ASTContext &Ctx) { if (++N == DEnd) continue; if (const EnumDecl *ED = dyn_cast<EnumDecl>(*N)) { - if (++N != DEnd) - if (const TypedefDecl *TDF = dyn_cast<TypedefDecl>(*N)) { - // prefer typedef-follows-enum to enum-follows-typedef pattern. - if (migrateNSEnumDecl(Ctx, ED, TDF)) { - ++D; ++D; - CacheObjCNSIntegerTypedefed(TD); - continue; + if (canModify(ED)) { + if (++N != DEnd) + if (const TypedefDecl *TDF = dyn_cast<TypedefDecl>(*N)) { + // prefer typedef-follows-enum to enum-follows-typedef pattern. + if (migrateNSEnumDecl(Ctx, ED, TDF)) { + ++D; ++D; + CacheObjCNSIntegerTypedefed(TD); + continue; + } } + if (migrateNSEnumDecl(Ctx, ED, TD)) { + ++D; + continue; } - if (migrateNSEnumDecl(Ctx, ED, TD)) { - ++D; - continue; } } CacheObjCNSIntegerTypedefed(TD); @@ -2042,7 +2035,7 @@ struct EditEntry { EditEntry() : File(), Offset(), RemoveLen() {} }; -} +} // end anonymous namespace namespace llvm { template<> struct DenseMapInfo<EditEntry> { @@ -2071,7 +2064,7 @@ template<> struct DenseMapInfo<EditEntry> { LHS.Text == RHS.Text; } }; -} +} // end namespace llvm namespace { class RemapFileParser { @@ -2153,7 +2146,7 @@ private: Entries.push_back(Entry); } }; -} +} // end anonymous namespace static bool reportDiag(const Twine &Err, DiagnosticsEngine &Diag) { Diag.Report(Diag.getCustomDiagID(DiagnosticsEngine::Error, "%0")) diff --git a/lib/ARCMigrate/TransProperties.cpp b/lib/ARCMigrate/TransProperties.cpp index 8667bc2a37da..389b03666bf7 100644 --- a/lib/ARCMigrate/TransProperties.cpp +++ b/lib/ARCMigrate/TransProperties.cpp @@ -76,7 +76,7 @@ public: static void collectProperties(ObjCContainerDecl *D, AtPropDeclsTy &AtProps, AtPropDeclsTy *PrevAtProps = nullptr) { - for (auto *Prop : D->properties()) { + for (auto *Prop : D->instance_properties()) { if (Prop->getAtLoc().isInvalid()) continue; unsigned RawLoc = Prop->getAtLoc().getRawEncoding(); |
