[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