Skip to content

Commit

Permalink
[ASTImporter] Changed use of Import to Import_New in ASTNodeImporter.
Browse files Browse the repository at this point in the history
Reviewers: a.sidorin, shafik, martong, a_sidorin

Reviewed By: a_sidorin

Subscribers: a_sidorin, rnkovacs, gamesh411, dkrupp, martong, Szelethus, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D53757

llvm-svn: 356874
  • Loading branch information
balazske committed Mar 25, 2019
1 parent 65584d3 commit 57949eb
Showing 1 changed file with 22 additions and 50 deletions.
72 changes: 22 additions & 50 deletions clang/lib/AST/ASTImporter.cpp
Expand Up @@ -148,32 +148,20 @@ namespace clang {
// Use this to import pointers of specific type.
template <typename ImportT>
LLVM_NODISCARD Error importInto(ImportT *&To, ImportT *From) {
auto ToI = Importer.Import(From);
if (!ToI && From)
return make_error<ImportError>();
To = cast_or_null<ImportT>(ToI);
return Error::success();
// FIXME: This should be the final code.
//auto ToOrErr = Importer.Import(From);
//if (ToOrErr) {
// To = cast_or_null<ImportT>(*ToOrErr);
//}
//return ToOrErr.takeError();
auto ToOrErr = Importer.Import_New(From);
if (ToOrErr)
To = cast_or_null<ImportT>(*ToOrErr);
return ToOrErr.takeError();
}

// Call the import function of ASTImporter for a baseclass of type `T` and
// cast the return value to `T`.
template <typename T>
Expected<T *> import(T *From) {
auto *To = Importer.Import(From);
if (!To && From)
return make_error<ImportError>();
return cast_or_null<T>(To);
// FIXME: This should be the final code.
//auto ToOrErr = Importer.Import(From);
//if (!ToOrErr)
// return ToOrErr.takeError();
//return cast_or_null<T>(*ToOrErr);
auto ToOrErr = Importer.Import_New(From);
if (!ToOrErr)
return ToOrErr.takeError();
return cast_or_null<T>(*ToOrErr);
}

template <typename T>
Expand All @@ -184,13 +172,7 @@ namespace clang {
// Call the import function of ASTImporter for type `T`.
template <typename T>
Expected<T> import(const T &From) {
T To = Importer.Import(From);
T DefaultT;
if (To == DefaultT && !(From == DefaultT))
return make_error<ImportError>();
return To;
// FIXME: This should be the final code.
//return Importer.Import(From);
return Importer.Import_New(From);
}

template <class T>
Expand Down Expand Up @@ -282,8 +264,15 @@ namespace clang {
void InitializeImportedDecl(Decl *FromD, Decl *ToD) {
ToD->IdentifierNamespace = FromD->IdentifierNamespace;
if (FromD->hasAttrs())
for (const Attr *FromAttr : FromD->getAttrs())
ToD->addAttr(Importer.Import(FromAttr));
for (const Attr *FromAttr : FromD->getAttrs()) {
// FIXME: Return of the error here is not possible until store of
// import errors is implemented.
auto ToAttrOrErr = import(FromAttr);
if (ToAttrOrErr)
ToD->addAttr(*ToAttrOrErr);
else
llvm::consumeError(ToAttrOrErr.takeError());
}
if (FromD->isUsed())
ToD->setIsUsed();
if (FromD->isImplicit())
Expand Down Expand Up @@ -643,15 +632,6 @@ namespace clang {
FunctionDecl *FromFD);
};

// FIXME: Temporary until every import returns Expected.
template <>
Expected<TemplateName> ASTNodeImporter::import(const TemplateName &From) {
TemplateName To = Importer.Import(From);
if (To.isNull() && !From.isNull())
return make_error<ImportError>();
return To;
}

template <typename InContainerTy>
Error ASTNodeImporter::ImportTemplateArgumentListInfo(
SourceLocation FromLAngleLoc, SourceLocation FromRAngleLoc,
Expand Down Expand Up @@ -1692,15 +1672,10 @@ Error ASTNodeImporter::ImportImplicitMethods(
static Error setTypedefNameForAnonDecl(TagDecl *From, TagDecl *To,
ASTImporter &Importer) {
if (TypedefNameDecl *FromTypedef = From->getTypedefNameForAnonDecl()) {
Decl *ToTypedef = Importer.Import(FromTypedef);
if (!ToTypedef)
return make_error<ImportError>();
To->setTypedefNameForAnonDecl(cast<TypedefNameDecl>(ToTypedef));
// FIXME: This should be the final code.
//if (Expected<Decl *> ToTypedefOrErr = Importer.Import(FromTypedef))
// To->setTypedefNameForAnonDecl(cast<TypedefNameDecl>(*ToTypedefOrErr));
//else
// return ToTypedefOrErr.takeError();
if (ExpectedDecl ToTypedefOrErr = Importer.Import_New(FromTypedef))
To->setTypedefNameForAnonDecl(cast<TypedefNameDecl>(*ToTypedefOrErr));
else
return ToTypedefOrErr.takeError();
}
return Error::success();
}
Expand Down Expand Up @@ -3386,9 +3361,6 @@ ExpectedDecl ASTNodeImporter::VisitIndirectFieldDecl(IndirectFieldDecl *D) {
// FIXME here we leak `NamedChain` which is allocated before
return ToIndirectField;

for (const auto *Attr : D->attrs())
ToIndirectField->addAttr(Importer.Import(Attr));

ToIndirectField->setAccess(D->getAccess());
ToIndirectField->setLexicalDeclContext(LexicalDC);
LexicalDC->addDeclInternal(ToIndirectField);
Expand Down

0 comments on commit 57949eb

Please sign in to comment.