summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/CheckStatement.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-11-30 16:30:21 +0100
committerRoberto Raggi <roberto.raggi@nokia.com>2009-11-30 17:07:22 +0100
commit527a9bd526d854d3f43b633a94af6dea642297db (patch)
treee334bb57c912b649551493dc985d2f0dd2e62a22 /src/shared/cplusplus/CheckStatement.cpp
parent5fc8324b8bb72ed5156ce52db2e6e506e568b405 (diff)
downloadqt-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.cpp33
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;
+}