[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdevelop/languages/cpp
From:       David Nolden <david.nolden.kde () art-master ! de>
Date:       2007-11-13 0:52:38
Message-ID: 1194915158.528933.24138.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 735915 by zwabel:

Make the name-compiler record the whole template-arguments, including \
pointer-operators or expressions. Add a test for this that is now successful.



 M  +7 -1      cppduchain/tests/test_duchain.cpp  
 M  +3 -9      parser/name_compiler.cpp  
 M  +1 -1      parser/name_compiler.h  


--- trunk/KDE/kdevelop/languages/cpp/cppduchain/tests/test_duchain.cpp #735914:735915
@@ -1340,7 +1340,7 @@
 }
 
 void TestDUChain::testTemplates2() {
-  QByteArray method("struct S {} ; template<class TT> class Base { struct Alloc { \
typedef TT& referenceType; }; }; template<class T> class Class : public Base<T> { \
typedef typename Base<T>::Alloc Alloc; typedef typename Alloc::referenceType \
reference; reference member; };"); +  QByteArray method("struct S {} ; template<class \
TT> class Base { struct Alloc { typedef TT& referenceType; }; }; template<class T> \
struct Class : public Base<T> { typedef typename Base<T>::Alloc Alloc; typedef \
typename Alloc::referenceType reference; reference member; }; Class<S*> instance;");  \
  DUContext* top = parse(method, DumpNone);
 
@@ -1356,6 +1356,12 @@
   QVERIFY(memberDecl->abstractType());
   kDebug() << memberDecl->toString();
   QCOMPARE(memberDecl->abstractType()->toString(), QString("S*&"));
+
+  memberDecl = findDeclaration(top, QualifiedIdentifier("instance"));
+  QVERIFY(memberDecl);
+  QVERIFY(memberDecl->abstractType());
+  kDebug() << memberDecl->toString();
+  QCOMPARE(memberDecl->abstractType()->toString(), QString("Class< S* >"));
   
   release(top);
 }
--- trunk/KDE/kdevelop/languages/cpp/parser/name_compiler.cpp #735914:735915
@@ -33,7 +33,7 @@
 {
 }
 
-QString NameCompiler::decode_operator(OperatorAST* ast) const
+QString NameCompiler::decode(AST* ast) const
 {
   QString ret;
   for( size_t a = ast->start_token; a < ast->end_token; a++ ) {
@@ -68,7 +68,7 @@
       tmp_name += QLatin1String("operator");
 
       if (op_id->op && op_id->op->op)
-        tmp_name +=  decode_operator(op_id->op);
+        tmp_name +=  decode(op_id->op);
       else
         tmp_name += QLatin1String("{...cast...}");
 
@@ -91,15 +91,9 @@
 
 void NameCompiler::visitTemplateArgument(TemplateArgumentAST *node)
 {
-  if (node->type_id && node->type_id->type_specifier)
-    {
-      TypeCompiler type_cc(m_session);
-      type_cc.run(node->type_id->type_specifier);
-      m_currentIdentifier.appendTemplateIdentifier(QualifiedIdentifier(type_cc.identifier()));
                
-    }
+  m_currentIdentifier.appendTemplateIdentifier(QualifiedIdentifier(decode(node)));
 }
 
-
 const QualifiedIdentifier& NameCompiler::identifier() const
 {
   return _M_name;
--- trunk/KDE/kdevelop/languages/cpp/parser/name_compiler.h #735914:735915
@@ -50,7 +50,7 @@
   virtual void visitTemplateArgument(TemplateArgumentAST *node);
 
   void internal_run(AST *node);
-  QString decode_operator(OperatorAST* ast) const;
+  QString decode(AST* ast) const;
 
 private:
   ParseSession* m_session;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic