summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaTemplateInstantiate.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Sema/SemaTemplateInstantiate.cpp')
-rw-r--r--clang/lib/Sema/SemaTemplateInstantiate.cpp49
1 files changed, 3 insertions, 46 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiate.cpp b/clang/lib/Sema/SemaTemplateInstantiate.cpp
index a995181d019..c281b96a9ea 100644
--- a/clang/lib/Sema/SemaTemplateInstantiate.cpp
+++ b/clang/lib/Sema/SemaTemplateInstantiate.cpp
@@ -331,9 +331,6 @@ namespace {
/// \brief Transform the given template name by instantiating it.
TemplateName TransformTemplateName(TemplateName Template);
- /// \brief Transform the given template argument by instantiating it.
- TemplateArgument TransformTemplateArgument(const TemplateArgument &Arg);
-
/// \brief Transforms a template type parameter type by performing
/// substitution of the corresponding template type argument.
QualType TransformTemplateTypeParmType(const TemplateTypeParmType *T);
@@ -360,11 +357,6 @@ TemplateInstantiator::TransformTemplateName(TemplateName Template) {
TemplateArgs);
}
-TemplateArgument
-TemplateInstantiator::TransformTemplateArgument(const TemplateArgument &Arg) {
- return getSema().Instantiate(Arg, TemplateArgs);
-}
-
QualType
TemplateInstantiator::TransformTemplateTypeParmType(
const TemplateTypeParmType *T) {
@@ -852,42 +844,7 @@ Sema::InstantiateTemplateName(TemplateName Name, SourceLocation Loc,
TemplateArgument Sema::Instantiate(TemplateArgument Arg,
const TemplateArgumentList &TemplateArgs) {
- switch (Arg.getKind()) {
- case TemplateArgument::Null:
- assert(false && "Should never have a NULL template argument");
- break;
-
- case TemplateArgument::Type: {
- QualType T = InstantiateType(Arg.getAsType(), TemplateArgs,
- Arg.getLocation(), DeclarationName());
- if (T.isNull())
- return TemplateArgument();
-
- return TemplateArgument(Arg.getLocation(), T);
- }
-
- case TemplateArgument::Declaration:
- // FIXME: Template instantiation for template template parameters.
- return Arg;
-
- case TemplateArgument::Integral:
- return Arg;
-
- case TemplateArgument::Expression: {
- // Template argument expressions are not potentially evaluated.
- EnterExpressionEvaluationContext Unevaluated(*this, Action::Unevaluated);
-
- Sema::OwningExprResult E = InstantiateExpr(Arg.getAsExpr(), TemplateArgs);
- if (E.isInvalid())
- return TemplateArgument();
- return TemplateArgument(E.takeAs<Expr>());
- }
-
- case TemplateArgument::Pack:
- assert(0 && "FIXME: Implement!");
- break;
- }
-
- assert(false && "Unhandled template argument kind");
- return TemplateArgument();
+ TemplateInstantiator Instantiator(*this, TemplateArgs, SourceLocation(),
+ DeclarationName());
+ return Instantiator.TransformTemplateArgument(Arg);
}
OpenPOWER on IntegriCloud