diff options
author | John McCall <rjmccall@apple.com> | 2009-11-24 19:00:30 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2009-11-24 19:00:30 +0000 |
commit | f7a1a744eba4b29ceb0f20af8f34515d892fdd64 (patch) | |
tree | 9698ed40b4b0973e9f2e64c7af2fd896b154ed43 /lib/Sema/SemaTemplateInstantiate.cpp | |
parent | 909e58988b3a3bb2ad36bec03aafa1302544fd73 (diff) |
Rip out TemplateIdRefExpr and make UnresolvedLookupExpr and
DependentScopeDeclRefExpr support storing templateids. Unite the common
code paths between ActOnDeclarationNameExpr and ActOnTemplateIdExpr.
This gets us to a point where we don't need to store function templates in
the AST using TemplateNames, which is critical to ripping out OverloadedFunction.
Also resolves a few FIXMEs.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@89785 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaTemplateInstantiate.cpp')
-rw-r--r-- | lib/Sema/SemaTemplateInstantiate.cpp | 48 |
1 files changed, 1 insertions, 47 deletions
diff --git a/lib/Sema/SemaTemplateInstantiate.cpp b/lib/Sema/SemaTemplateInstantiate.cpp index 502c151f4e..dd92218c6b 100644 --- a/lib/Sema/SemaTemplateInstantiate.cpp +++ b/lib/Sema/SemaTemplateInstantiate.cpp @@ -557,9 +557,6 @@ namespace { bool isAddressOfOperand); Sema::OwningExprResult TransformDeclRefExpr(DeclRefExpr *E, bool isAddressOfOperand); - Sema::OwningExprResult TransformUnresolvedLookupExpr( - UnresolvedLookupExpr *E, - bool isAddressOfOperand); Sema::OwningExprResult TransformCXXDefaultArgExpr(CXXDefaultArgExpr *E, bool isAddressOfOperand); @@ -698,49 +695,6 @@ TemplateInstantiator::TransformPredefinedExpr(PredefinedExpr *E, } Sema::OwningExprResult -TemplateInstantiator::TransformUnresolvedLookupExpr(UnresolvedLookupExpr *Old, - bool isAddressOfOperand) { - LookupResult R(SemaRef, Old->getName(), Old->getNameLoc(), - Sema::LookupOrdinaryName); - - for (UnresolvedLookupExpr::decls_iterator I = Old->decls_begin(), - E = Old->decls_end(); I != E; ++I) { - NamedDecl *InstD = SemaRef.FindInstantiatedDecl(*I, TemplateArgs); - if (!InstD) - return SemaRef.ExprError(); - - // The lookup values can never instantiate to a UsingDecl, because - // only UnresolvedUsingValueDecls do that, and those can never - // appear in UnresolvedLookupExprs (only UnresolvedMemberLookupExprs). - assert(!isa<UsingDecl>(InstD)); - - // Analogously. - assert(!isa<UnresolvedUsingValueDecl>(InstD->getUnderlyingDecl())); - - R.addDecl(InstD); - } - - R.resolveKind(); - - // This shouldn't be possible. - assert(!R.isAmbiguous()); - - CXXScopeSpec SS; - NestedNameSpecifier *Qualifier = 0; - if (Old->getQualifier()) { - Qualifier = TransformNestedNameSpecifier(Old->getQualifier(), - Old->getQualifierRange()); - if (!Qualifier) - return SemaRef.ExprError(); - - SS.setScopeRep(Qualifier); - SS.setRange(Old->getQualifierRange()); - } - - return SemaRef.BuildDeclarationNameExpr(&SS, R, Old->requiresADL()); -} - -Sema::OwningExprResult TemplateInstantiator::TransformDeclRefExpr(DeclRefExpr *E, bool isAddressOfOperand) { // FIXME: Clean this up a bit @@ -847,7 +801,7 @@ TemplateInstantiator::TransformDeclRefExpr(DeclRefExpr *E, SS.setRange(E->getQualifierRange()); } - return SemaRef.BuildDeclarationNameExpr(&SS, E->getLocation(), InstD); + return SemaRef.BuildDeclarationNameExpr(SS, E->getLocation(), InstD); } Sema::OwningExprResult TemplateInstantiator::TransformCXXDefaultArgExpr( |