esakella created this revision.
esakella added reviewers: klimek, bkramer, rsmith.
esakella added subscribers: cfe-commits, karies.
Herald added a subscriber: aemerson.
-Implemented the VisitTemplateTypeParmType and VisitInjectedClassNameType 
functions in the ASTImporter class, and also enabled the import of the 
definition of the template class. 

-Edited the existing tests to check for the import of these ASTNodes.

http://reviews.llvm.org/D17029

Files:
  lib/AST/ASTImporter.cpp
  test/ASTMerge/Inputs/class-template1.cpp
  test/ASTMerge/Inputs/class-template2.cpp

Index: test/ASTMerge/Inputs/class-template2.cpp
===================================================================
--- test/ASTMerge/Inputs/class-template2.cpp
+++ test/ASTMerge/Inputs/class-template2.cpp
@@ -33,3 +33,17 @@
 struct X0<wchar_t> {
   float member;
 };
+
+template<class V, typename T>
+class X7 {
+  V var;
+  void f(T t) { }
+  V g(T t) { return t; }
+};
+
+template<class V>
+class X8 {
+  typedef X8 x;
+  X8() { }
+  int var;
+};
Index: test/ASTMerge/Inputs/class-template1.cpp
===================================================================
--- test/ASTMerge/Inputs/class-template1.cpp
+++ test/ASTMerge/Inputs/class-template1.cpp
@@ -32,3 +32,17 @@
 struct X0<wchar_t> {
   int member;
 };
+
+template<class V, typename T>
+class X7 {
+  V var;
+  void f(T t) { }
+  V g(T t) { return t; }
+};
+
+template<class V>
+class X8 {
+  typedef X8 x;
+  X8() { }
+  int var;
+};
Index: lib/AST/ASTImporter.cpp
===================================================================
--- lib/AST/ASTImporter.cpp
+++ lib/AST/ASTImporter.cpp
@@ -68,10 +68,11 @@
     QualType VisitRecordType(const RecordType *T);
     QualType VisitEnumType(const EnumType *T);
     QualType VisitAttributedType(const AttributedType *T);
-    // FIXME: TemplateTypeParmType
+    QualType VisitTemplateTypeParmType(const TemplateTypeParmType *T);
     // FIXME: SubstTemplateTypeParmType
     QualType VisitTemplateSpecializationType(const TemplateSpecializationType *T);
     QualType VisitElaboratedType(const ElaboratedType *T);
+    QualType VisitInjectedClassNameType(const InjectedClassNameType *T);
     // FIXME: DependentNameType
     // FIXME: DependentTemplateSpecializationType
     QualType VisitObjCInterfaceType(const ObjCInterfaceType *T);
@@ -1797,6 +1798,18 @@
     ToModifiedType, ToEquivalentType);
 }
 
+QualType ASTNodeImporter::VisitTemplateTypeParmType(const TemplateTypeParmType *T) {
+  TemplateTypeParmDecl *ToDecl
+    = dyn_cast_or_null<TemplateTypeParmDecl>(Importer.Import(T->getDecl()));
+  if (!ToDecl)
+    return QualType();
+
+  return Importer.getToContext().getTemplateTypeParmType(T->getDepth(),
+                                                         T->getIndex(),
+                                                         T->isParameterPack(),
+                                                         ToDecl);
+}
+
 QualType ASTNodeImporter::VisitTemplateSpecializationType(
                                        const TemplateSpecializationType *T) {
   TemplateName ToTemplate = Importer.Import(T->getTemplateName());
@@ -1838,6 +1851,15 @@
                                                    ToQualifier, ToNamedType);
 }
 
+QualType ASTNodeImporter::VisitInjectedClassNameType(const InjectedClassNameType *T) {
+  CXXRecordDecl *ToDecl
+    = dyn_cast_or_null<CXXRecordDecl>(Importer.Import(T->getDecl()));
+  if (!ToDecl)
+    return  QualType();
+
+  return Importer.getToContext().getTagDeclType(ToDecl);
+}
+
 QualType ASTNodeImporter::VisitObjCInterfaceType(const ObjCInterfaceType *T) {
   ObjCInterfaceDecl *Class
     = dyn_cast_or_null<ObjCInterfaceDecl>(Importer.Import(T->getDecl()));
@@ -4279,7 +4301,7 @@
 
   if (DTemplated->isCompleteDefinition() &&
       !D2Templated->isCompleteDefinition()) {
-    // FIXME: Import definition!
+    ImportDefinition(DTemplated, D2Templated);
   }
   
   return D2;
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to