diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2009-11-30 16:30:21 +0100 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2009-11-30 17:07:22 +0100 |
commit | 527a9bd526d854d3f43b633a94af6dea642297db (patch) | |
tree | e334bb57c912b649551493dc985d2f0dd2e62a22 /src/shared/cplusplus/CheckStatement.cpp | |
parent | 5fc8324b8bb72ed5156ce52db2e6e506e568b405 (diff) | |
download | qt-creator-527a9bd526d854d3f43b633a94af6dea642297db.tar.gz |
Inital support for Q_D/Q_Q declarations.
Diffstat (limited to 'src/shared/cplusplus/CheckStatement.cpp')
-rw-r--r-- | src/shared/cplusplus/CheckStatement.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/shared/cplusplus/CheckStatement.cpp b/src/shared/cplusplus/CheckStatement.cpp index 1273f81610..dec68b1ea4 100644 --- a/src/shared/cplusplus/CheckStatement.cpp +++ b/src/shared/cplusplus/CheckStatement.cpp @@ -54,6 +54,9 @@ #include "CoreTypes.h" #include "Control.h" #include "Symbols.h" +#include "Names.h" +#include "Literals.h" +#include <string> using namespace CPlusPlus; @@ -307,4 +310,34 @@ bool CheckStatement::visit(WhileStatementAST *ast) return false; } +bool CheckStatement::visit(QtMemberDeclarationAST *ast) +{ + Name *name = 0; + + if (tokenKind(ast->q_token) == T_Q_D) + name = control()->nameId(control()->findOrInsertIdentifier("d")); + else + name = control()->nameId(control()->findOrInsertIdentifier("q")); + + FullySpecifiedType declTy = semantic()->check(ast->type_id, _scope); + + if (tokenKind(ast->q_token) == T_Q_D) { + if (NamedType *namedTy = declTy->asNamedType()) { + if (NameId *nameId = namedTy->name()->asNameId()) { + std::string privateClass; + privateClass += nameId->identifier()->chars(); + privateClass += "Private"; + + Name *privName = control()->nameId(control()->findOrInsertIdentifier(privateClass.c_str(), privateClass.size())); + declTy.setType(control()->namedType(privName)); + } + } + } + + Declaration *symbol = control()->newDeclaration(/*generated*/ 0, name); + symbol->setType(control()->pointerType(declTy)); + + _scope->enterSymbol(symbol); + return false; +} |