summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/shared/cplusplus/AST.cpp31
-rw-r--r--src/shared/cplusplus/AST.h50
-rw-r--r--src/shared/cplusplus/ASTClone.cpp23
-rw-r--r--src/shared/cplusplus/ASTMatch0.cpp20
-rw-r--r--src/shared/cplusplus/ASTMatcher.cpp29
-rw-r--r--src/shared/cplusplus/ASTMatcher.h4
-rw-r--r--src/shared/cplusplus/ASTVisit.cpp19
-rw-r--r--src/shared/cplusplus/ASTVisitor.h10
-rw-r--r--src/shared/cplusplus/ASTfwd.h3
-rw-r--r--src/shared/cplusplus/CheckDeclaration.cpp23
-rw-r--r--src/shared/cplusplus/CheckDeclaration.h1
-rw-r--r--src/shared/cplusplus/Parser.cpp26
12 files changed, 37 insertions, 202 deletions
diff --git a/src/shared/cplusplus/AST.cpp b/src/shared/cplusplus/AST.cpp
index 9a8312eaba..c85e4a7b6f 100644
--- a/src/shared/cplusplus/AST.cpp
+++ b/src/shared/cplusplus/AST.cpp
@@ -144,42 +144,19 @@ unsigned AccessDeclarationAST::lastToken() const
return access_specifier_token + 1;
}
-unsigned QtPropertyDeclarationNamingItemAST::firstToken() const
+unsigned QtPropertyDeclarationItemAST::firstToken() const
{
return item_name_token;
}
-unsigned QtPropertyDeclarationNamingItemAST::lastToken() const
+unsigned QtPropertyDeclarationItemAST::lastToken() const
{
- if (name_value)
- return name_value->lastToken();
- else
- return item_name_token + 1;
-}
-
-unsigned QtPropertyDeclarationBoolItemAST::firstToken() const
-{
- return item_name_token;
-}
-
-unsigned QtPropertyDeclarationBoolItemAST::lastToken() const
-{
- if (bool_value)
- return bool_value->lastToken();
+ if (expression)
+ return expression->lastToken();
else
return item_name_token + 1;
}
-unsigned QtPropertyDeclarationFlaggingItemAST::firstToken() const
-{
- return item_name_token;
-}
-
-unsigned QtPropertyDeclarationFlaggingItemAST::lastToken() const
-{
- return item_name_token + 1;
-}
-
unsigned QtPropertyDeclarationAST::firstToken() const
{
return property_specifier_token;
diff --git a/src/shared/cplusplus/AST.h b/src/shared/cplusplus/AST.h
index 4b0c149357..2072af3e16 100644
--- a/src/shared/cplusplus/AST.h
+++ b/src/shared/cplusplus/AST.h
@@ -261,10 +261,7 @@ public:
virtual QtMemberDeclarationAST *asQtMemberDeclaration() { return 0; }
virtual QtMethodAST *asQtMethod() { return 0; }
virtual QtPropertyDeclarationAST *asQtPropertyDeclaration() { return 0; }
- virtual QtPropertyDeclarationBoolItemAST *asQtPropertyDeclarationBoolItem() { return 0; }
- virtual QtPropertyDeclarationFlaggingItemAST *asQtPropertyDeclarationFlaggingItem() { return 0; }
virtual QtPropertyDeclarationItemAST *asQtPropertyDeclarationItem() { return 0; }
- virtual QtPropertyDeclarationNamingItemAST *asQtPropertyDeclarationNamingItem() { return 0; }
virtual QualifiedNameAST *asQualifiedName() { return 0; }
virtual ReferenceAST *asReference() { return 0; }
virtual ReturnStatementAST *asReturnStatement() { return 0; }
@@ -559,58 +556,15 @@ class QtPropertyDeclarationItemAST: public AST
{
public:
unsigned item_name_token;
+ ExpressionAST *expression;
public:
virtual QtPropertyDeclarationItemAST *asQtPropertyDeclarationItem() { return this; }
- virtual QtPropertyDeclarationItemAST *clone(MemoryPool *pool) const = 0;
-};
-
-class QtPropertyDeclarationNamingItemAST: public QtPropertyDeclarationItemAST
-{
-public:
- SimpleNameAST *name_value;
-
-public:
- virtual QtPropertyDeclarationNamingItemAST *asQtPropertyDeclarationNamingItem() { return this; }
-
- virtual unsigned firstToken() const;
- virtual unsigned lastToken() const;
-
- virtual QtPropertyDeclarationNamingItemAST *clone(MemoryPool *pool) const;
-
-protected:
- virtual void accept0(ASTVisitor *visitor);
- virtual bool match0(AST *, ASTMatcher *);
-};
-
-class QtPropertyDeclarationBoolItemAST: public QtPropertyDeclarationItemAST
-{
-public:
- BoolLiteralAST *bool_value;
-
-public:
- virtual QtPropertyDeclarationBoolItemAST *asQtPropertyDeclarationBoolItem() { return this; }
-
- virtual unsigned firstToken() const;
- virtual unsigned lastToken() const;
-
- virtual QtPropertyDeclarationBoolItemAST *clone(MemoryPool *pool) const;
-
-protected:
- virtual void accept0(ASTVisitor *visitor);
- virtual bool match0(AST *, ASTMatcher *);
-};
-
-class QtPropertyDeclarationFlaggingItemAST: public QtPropertyDeclarationItemAST
-{
-public:
- virtual QtPropertyDeclarationFlaggingItemAST *asQtPropertyDeclarationFlaggingItem() { return this; }
-
virtual unsigned firstToken() const;
virtual unsigned lastToken() const;
- virtual QtPropertyDeclarationFlaggingItemAST *clone(MemoryPool *pool) const;
+ virtual QtPropertyDeclarationItemAST *clone(MemoryPool *pool) const;
protected:
virtual void accept0(ASTVisitor *visitor);
diff --git a/src/shared/cplusplus/ASTClone.cpp b/src/shared/cplusplus/ASTClone.cpp
index 87ee91558b..984b7d9526 100644
--- a/src/shared/cplusplus/ASTClone.cpp
+++ b/src/shared/cplusplus/ASTClone.cpp
@@ -138,25 +138,12 @@ AccessDeclarationAST *AccessDeclarationAST::clone(MemoryPool *pool) const
return ast;
}
-QtPropertyDeclarationNamingItemAST *QtPropertyDeclarationNamingItemAST::clone(MemoryPool *pool) const
+QtPropertyDeclarationItemAST *QtPropertyDeclarationItemAST::clone(MemoryPool *pool) const
{
- QtPropertyDeclarationNamingItemAST *ast = new (pool) QtPropertyDeclarationNamingItemAST;
- if (name_value)
- ast->name_value = name_value->clone(pool);
- return ast;
-}
-
-QtPropertyDeclarationBoolItemAST *QtPropertyDeclarationBoolItemAST::clone(MemoryPool *pool) const
-{
- QtPropertyDeclarationBoolItemAST *ast = new (pool) QtPropertyDeclarationBoolItemAST;
- if (bool_value)
- ast->bool_value = bool_value->clone(pool);
- return ast;
-}
-
-QtPropertyDeclarationFlaggingItemAST *QtPropertyDeclarationFlaggingItemAST::clone(MemoryPool *pool) const
-{
- QtPropertyDeclarationFlaggingItemAST *ast = new (pool) QtPropertyDeclarationFlaggingItemAST;
+ QtPropertyDeclarationItemAST *ast = new (pool) QtPropertyDeclarationItemAST;
+ ast->item_name_token = item_name_token;
+ if (expression)
+ ast->expression = expression->clone(pool);
return ast;
}
diff --git a/src/shared/cplusplus/ASTMatch0.cpp b/src/shared/cplusplus/ASTMatch0.cpp
index a2fcf8e0b9..8ffc5e6cbd 100644
--- a/src/shared/cplusplus/ASTMatch0.cpp
+++ b/src/shared/cplusplus/ASTMatch0.cpp
@@ -105,25 +105,9 @@ bool AccessDeclarationAST::match0(AST *pattern, ASTMatcher *matcher)
return false;
}
-bool QtPropertyDeclarationNamingItemAST::match0(AST *pattern, ASTMatcher *matcher)
+bool QtPropertyDeclarationItemAST::match0(AST *pattern, ASTMatcher *matcher)
{
- if (QtPropertyDeclarationNamingItemAST *_other = pattern->asQtPropertyDeclarationNamingItem())
- return matcher->match(this, _other);
-
- return false;
-}
-
-bool QtPropertyDeclarationBoolItemAST::match0(AST *pattern, ASTMatcher *matcher)
-{
- if (QtPropertyDeclarationBoolItemAST *_other = pattern->asQtPropertyDeclarationBoolItem())
- return matcher->match(this, _other);
-
- return false;
-}
-
-bool QtPropertyDeclarationFlaggingItemAST::match0(AST *pattern, ASTMatcher *matcher)
-{
- if (QtPropertyDeclarationFlaggingItemAST *_other = pattern->asQtPropertyDeclarationFlaggingItem())
+ if (QtPropertyDeclarationItemAST *_other = pattern->asQtPropertyDeclarationItem())
return matcher->match(this, _other);
return false;
diff --git a/src/shared/cplusplus/ASTMatcher.cpp b/src/shared/cplusplus/ASTMatcher.cpp
index c3e04a0d4e..e891d606ce 100644
--- a/src/shared/cplusplus/ASTMatcher.cpp
+++ b/src/shared/cplusplus/ASTMatcher.cpp
@@ -206,40 +206,21 @@ bool ASTMatcher::match(AccessDeclarationAST *node, AccessDeclarationAST *pattern
return true;
}
-bool ASTMatcher::match(QtPropertyDeclarationNamingItemAST *node, QtPropertyDeclarationNamingItemAST *pattern)
+bool ASTMatcher::match(QtPropertyDeclarationItemAST *node, QtPropertyDeclarationItemAST *pattern)
{
(void) node;
(void) pattern;
- if (! pattern->name_value)
- pattern->name_value = node->name_value;
- else if (! AST::match(node->name_value, pattern->name_value, this))
- return false;
+ pattern->item_name_token = node->item_name_token;
- return true;
-}
-
-bool ASTMatcher::match(QtPropertyDeclarationBoolItemAST *node, QtPropertyDeclarationBoolItemAST *pattern)
-{
- (void) node;
- (void) pattern;
-
- if (! pattern->bool_value)
- pattern->bool_value = node->bool_value;
- else if (! AST::match(node->bool_value, pattern->bool_value, this))
+ if (! pattern->expression)
+ pattern->expression = node->expression;
+ else if (! AST::match(node->expression, pattern->expression, this))
return false;
return true;
}
-bool ASTMatcher::match(QtPropertyDeclarationFlaggingItemAST *node, QtPropertyDeclarationFlaggingItemAST *pattern)
-{
- (void) node;
- (void) pattern;
-
- return true;
-}
-
bool ASTMatcher::match(QtPropertyDeclarationAST *node, QtPropertyDeclarationAST *pattern)
{
(void) node;
diff --git a/src/shared/cplusplus/ASTMatcher.h b/src/shared/cplusplus/ASTMatcher.h
index c6466a4919..d0b1e1cfff 100644
--- a/src/shared/cplusplus/ASTMatcher.h
+++ b/src/shared/cplusplus/ASTMatcher.h
@@ -141,9 +141,7 @@ public:
virtual bool match(QtMethodAST *node, QtMethodAST *pattern);
virtual bool match(QtMemberDeclarationAST *node, QtMemberDeclarationAST *pattern);
virtual bool match(ObjCClassDeclarationAST *node, ObjCClassDeclarationAST *pattern);
- virtual bool match(QtPropertyDeclarationBoolItemAST *node, QtPropertyDeclarationBoolItemAST *pattern);
- virtual bool match(QtPropertyDeclarationFlaggingItemAST *node, QtPropertyDeclarationFlaggingItemAST *pattern);
- virtual bool match(QtPropertyDeclarationNamingItemAST *node, QtPropertyDeclarationNamingItemAST *pattern);
+ virtual bool match(QtPropertyDeclarationItemAST *node, QtPropertyDeclarationItemAST *pattern);
virtual bool match(ObjCClassForwardDeclarationAST *node, ObjCClassForwardDeclarationAST *pattern);
virtual bool match(ObjCProtocolDeclarationAST *node, ObjCProtocolDeclarationAST *pattern);
virtual bool match(ObjCProtocolForwardDeclarationAST *node, ObjCProtocolForwardDeclarationAST *pattern);
diff --git a/src/shared/cplusplus/ASTVisit.cpp b/src/shared/cplusplus/ASTVisit.cpp
index 8b53d99f7f..b7fccf6e48 100644
--- a/src/shared/cplusplus/ASTVisit.cpp
+++ b/src/shared/cplusplus/ASTVisit.cpp
@@ -108,25 +108,10 @@ void AccessDeclarationAST::accept0(ASTVisitor *visitor)
visitor->endVisit(this);
}
-void QtPropertyDeclarationNamingItemAST::accept0(ASTVisitor *visitor)
-{
- if (visitor->visit(this)) {
- accept(name_value, visitor);
- }
- visitor->endVisit(this);
-}
-
-void QtPropertyDeclarationBoolItemAST::accept0(ASTVisitor *visitor)
-{
- if (visitor->visit(this)) {
- accept(bool_value, visitor);
- }
- visitor->endVisit(this);
-}
-
-void QtPropertyDeclarationFlaggingItemAST::accept0(ASTVisitor *visitor)
+void QtPropertyDeclarationItemAST::accept0(ASTVisitor *visitor)
{
if (visitor->visit(this)) {
+ accept(expression, visitor);
}
visitor->endVisit(this);
}
diff --git a/src/shared/cplusplus/ASTVisitor.h b/src/shared/cplusplus/ASTVisitor.h
index 72a3f4b736..aedf129594 100644
--- a/src/shared/cplusplus/ASTVisitor.h
+++ b/src/shared/cplusplus/ASTVisitor.h
@@ -203,10 +203,7 @@ public:
virtual bool visit(WhileStatementAST *) { return true; }
virtual bool visit(QtMethodAST *) { return true; }
virtual bool visit(QtMemberDeclarationAST *) { return true; }
-
- virtual bool visit(QtPropertyDeclarationBoolItemAST *) { return true; }
- virtual bool visit(QtPropertyDeclarationFlaggingItemAST *) { return true; }
- virtual bool visit(QtPropertyDeclarationNamingItemAST *) { return true; }
+ virtual bool visit(QtPropertyDeclarationItemAST *) { return true; }
// ObjC++
virtual bool visit(ObjCClassDeclarationAST *) { return true; }
@@ -337,10 +334,7 @@ public:
virtual void endVisit(WhileStatementAST *) { }
virtual void endVisit(QtMethodAST *) { }
virtual void endVisit(QtMemberDeclarationAST *) { }
-
- virtual void endVisit(QtPropertyDeclarationBoolItemAST *) { }
- virtual void endVisit(QtPropertyDeclarationFlaggingItemAST *) { }
- virtual void endVisit(QtPropertyDeclarationNamingItemAST *) { }
+ virtual void endVisit(QtPropertyDeclarationItemAST *) { }
// ObjC++
virtual void endVisit(ObjCClassDeclarationAST *) { }
diff --git a/src/shared/cplusplus/ASTfwd.h b/src/shared/cplusplus/ASTfwd.h
index d2a1d317d8..9bce5ec76e 100644
--- a/src/shared/cplusplus/ASTfwd.h
+++ b/src/shared/cplusplus/ASTfwd.h
@@ -168,10 +168,7 @@ class QtFlagsDeclarationAST;
class QtMemberDeclarationAST;
class QtMethodAST;
class QtPropertyDeclarationAST;
-class QtPropertyDeclarationBoolItemAST;
-class QtPropertyDeclarationFlaggingItemAST;
class QtPropertyDeclarationItemAST;
-class QtPropertyDeclarationNamingItemAST;
class QualifiedNameAST;
class ReferenceAST;
class ReturnStatementAST;
diff --git a/src/shared/cplusplus/CheckDeclaration.cpp b/src/shared/cplusplus/CheckDeclaration.cpp
index a9ede700ca..2eb017b2a1 100644
--- a/src/shared/cplusplus/CheckDeclaration.cpp
+++ b/src/shared/cplusplus/CheckDeclaration.cpp
@@ -56,9 +56,12 @@
#include "Symbols.h"
#include "Control.h"
#include "Literals.h"
+#include "QtContextKeywords.h"
#include <string>
#include <cassert>
+#include <QDebug>
+
using namespace CPlusPlus;
CheckDeclaration::CheckDeclaration(Semantic *semantic)
@@ -815,23 +818,3 @@ bool CheckDeclaration::visit(QtFlagsDeclarationAST *ast)
semantic()->check(iter->value, _scope);
return false;
}
-
-bool CheckDeclaration::visit(QtPropertyDeclarationAST *ast)
-{
- if (ast->type_id)
- semantic()->check(ast->type_id, _scope);
- if (ast->property_name)
- semantic()->check(ast->property_name, _scope);
-
- for (QtPropertyDeclarationItemListAST *iter = ast->property_declaration_items;
- iter; iter = iter->next) {
- if (! iter->value)
- continue;
-
- if (QtPropertyDeclarationNamingItemAST *namedItem = iter->value->asQtPropertyDeclarationNamingItem())
- if (namedItem->name_value)
- semantic()->check(namedItem->name_value, _scope);
- }
-
- return false;
-}
diff --git a/src/shared/cplusplus/CheckDeclaration.h b/src/shared/cplusplus/CheckDeclaration.h
index 6d06d42b9b..269957257b 100644
--- a/src/shared/cplusplus/CheckDeclaration.h
+++ b/src/shared/cplusplus/CheckDeclaration.h
@@ -77,7 +77,6 @@ protected:
virtual bool visit(SimpleDeclarationAST *ast);
virtual bool visit(EmptyDeclarationAST *ast);
virtual bool visit(AccessDeclarationAST *ast);
- virtual bool visit(QtPropertyDeclarationAST *ast);
virtual bool visit(QtEnumDeclarationAST *ast);
virtual bool visit(QtFlagsDeclarationAST *ast);
virtual bool visit(AsmDefinitionAST *ast);
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index fd2efcf978..845fabcfe5 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -1806,34 +1806,30 @@ bool Parser::parseQtPropertyDeclaration(DeclarationAST *&node)
case Token_READ:
case Token_WRITE:
case Token_RESET:
- case Token_NOTIFY: {
- QtPropertyDeclarationNamingItemAST *nItem = new (_pool) QtPropertyDeclarationNamingItemAST;
- nItem->item_name_token = consumeToken();
- nItem->name_value = new (_pool) SimpleNameAST;
- match(T_IDENTIFIER, &nItem->name_value->identifier_token);
- item = nItem;
- break;
- }
-
+ case Token_NOTIFY:
case Token_DESIGNABLE:
case Token_SCRIPTABLE:
case Token_STORED:
case Token_USER: {
- QtPropertyDeclarationBoolItemAST *bItem = new (_pool) QtPropertyDeclarationBoolItemAST;
- bItem->item_name_token = consumeToken();
+ unsigned item_name_token = consumeToken();
ExpressionAST *expr = 0;
- if (parseBoolLiteral(expr)) {
- bItem->bool_value = expr->asBoolLiteral();
+ if (parsePostfixExpression(expr)) {
+ QtPropertyDeclarationItemAST *bItem =
+ new (_pool) QtPropertyDeclarationItemAST;
+ bItem->item_name_token = item_name_token;
+ bItem->expression = expr;
item = bItem;
} else {
- _translationUnit->error(cursor(), "expected `true' or `false' before `%s'", tok().spell());
+ _translationUnit->error(cursor(),
+ "expected expression before `%s'",
+ tok().spell());
}
break;
}
case Token_CONSTANT:
case Token_FINAL: {
- QtPropertyDeclarationFlaggingItemAST *fItem = new (_pool) QtPropertyDeclarationFlaggingItemAST;
+ QtPropertyDeclarationItemAST *fItem = new (_pool) QtPropertyDeclarationItemAST;
fItem->item_name_token = consumeToken();
item = fItem;
break;