From fef2ad6bba36158de74127c3443aba70934cbca9 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Tue, 8 Dec 2009 12:04:57 +0100
Subject: [PATCH] Create TypenameArgument symbols.

---
 src/shared/cplusplus/AST.h                | 4 ++--
 src/shared/cplusplus/CheckDeclaration.cpp | 8 ++++++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/shared/cplusplus/AST.h b/src/shared/cplusplus/AST.h
index 47342c2e045..f21d9042fd4 100644
--- a/src/shared/cplusplus/AST.h
+++ b/src/shared/cplusplus/AST.h
@@ -2083,7 +2083,7 @@ public:
     ExpressionAST *type_id;
 
 public: // annotations
-    Argument *symbol;
+    TypenameArgument *symbol;
 
 public:
     virtual TypenameTypeParameterAST *asTypenameTypeParameter() { return this; }
@@ -2109,7 +2109,7 @@ public:
     ExpressionAST *type_id;
 
 public:
-    Argument *symbol;
+    TypenameArgument *symbol;
 
 public:
     virtual TemplateTypeParameterAST *asTemplateTypeParameter() { return this; }
diff --git a/src/shared/cplusplus/CheckDeclaration.cpp b/src/shared/cplusplus/CheckDeclaration.cpp
index 3349263e1eb..719a0c82eb4 100644
--- a/src/shared/cplusplus/CheckDeclaration.cpp
+++ b/src/shared/cplusplus/CheckDeclaration.cpp
@@ -459,7 +459,9 @@ bool CheckDeclaration::visit(TypenameTypeParameterAST *ast)
         sourceLocation = ast->name->firstToken();
 
     const Name *name = semantic()->check(ast->name, _scope);
-    Argument *arg = control()->newArgument(sourceLocation, name); // ### new template type
+    TypenameArgument *arg = control()->newTypenameArgument(sourceLocation, name);
+    FullySpecifiedType ty = semantic()->check(ast->type_id, _scope);
+    arg->setType(ty);
     ast->symbol = arg;
     _scope->enterSymbol(arg);
     return false;
@@ -472,7 +474,9 @@ bool CheckDeclaration::visit(TemplateTypeParameterAST *ast)
         sourceLocation = ast->name->firstToken();
 
     const Name *name = semantic()->check(ast->name, _scope);
-    Argument *arg = control()->newArgument(sourceLocation, name); // ### new template type
+    TypenameArgument *arg = control()->newTypenameArgument(sourceLocation, name);
+    FullySpecifiedType ty = semantic()->check(ast->type_id, _scope);
+    arg->setType(ty);
     ast->symbol = arg;
     _scope->enterSymbol(arg);
     return false;
-- 
GitLab