summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@nokia.com>2009-08-04 16:22:24 +0200
committerErik Verbruggen <erik.verbruggen@nokia.com>2009-08-04 16:22:24 +0200
commite53d23d55c7df81f47f3b8ee78ed2c5863acf083 (patch)
tree4552e25864eafba55d27e78106ca29d44e1a20fb /src/shared/cplusplus
parent86ff16e58cac3e85ffe685053b4314c565ecdfb1 (diff)
downloadqt-creator-e53d23d55c7df81f47f3b8ee78ed2c5863acf083.tar.gz
Merged ObjCMethodDefinitionAST into ObjCMethodDeclarationAST.
Diffstat (limited to 'src/shared/cplusplus')
-rw-r--r--src/shared/cplusplus/AST.cpp14
-rw-r--r--src/shared/cplusplus/AST.h21
-rw-r--r--src/shared/cplusplus/ASTClone.cpp9
-rw-r--r--src/shared/cplusplus/ASTVisit.cpp10
-rw-r--r--src/shared/cplusplus/ASTVisitor.h2
-rw-r--r--src/shared/cplusplus/ASTfwd.h1
-rw-r--r--src/shared/cplusplus/CheckDeclaration.cpp28
-rw-r--r--src/shared/cplusplus/CheckDeclaration.h1
-rw-r--r--src/shared/cplusplus/Parser.cpp15
9 files changed, 12 insertions, 89 deletions
diff --git a/src/shared/cplusplus/AST.cpp b/src/shared/cplusplus/AST.cpp
index 0d859f385a..266d49c999 100644
--- a/src/shared/cplusplus/AST.cpp
+++ b/src/shared/cplusplus/AST.cpp
@@ -2398,21 +2398,9 @@ unsigned ObjCMethodDeclarationAST::lastToken() const
{
if (semicolon_token)
return semicolon_token + 1;
- else
- return method_prototype->lastToken();
-}
-
-unsigned ObjCMethodDefinitionAST::firstToken() const
-{
- return method_prototype->firstToken();
-}
-
-unsigned ObjCMethodDefinitionAST::lastToken() const
-{
if (function_body)
return function_body->lastToken();
- else
- return method_prototype->lastToken();
+ return method_prototype->lastToken();
}
unsigned ObjCClassImplementationAST::firstToken() const
diff --git a/src/shared/cplusplus/AST.h b/src/shared/cplusplus/AST.h
index dcdf5abee2..f7e483f881 100644
--- a/src/shared/cplusplus/AST.h
+++ b/src/shared/cplusplus/AST.h
@@ -222,7 +222,6 @@ public:
virtual ObjCMessageArgumentDeclarationListAST *asObjCMessageArgumentDeclarationList() { return 0; }
virtual ObjCMethodPrototypeAST *asObjCMethodPrototype() { return 0; }
virtual ObjCMethodDeclarationAST *asObjCMethodDeclaration() { return 0; }
- virtual ObjCMethodDefinitionAST *asObjCMethodDefinition() { return 0; }
virtual ObjCClassImplementationAST *asObjCClassImplementation() { return 0; }
virtual ObjCCategoryImplementationAST *asObjCCategoryImplementation() { return 0; }
virtual ObjCSynthesizedPropertyAST *asObjCSynthesizedProperty() { return 0; }
@@ -3040,6 +3039,7 @@ class CPLUSPLUS_EXPORT ObjCMethodDeclarationAST: public DeclarationAST
{
public:
ObjCMethodPrototypeAST *method_prototype;
+ StatementAST *function_body;
unsigned semicolon_token;
public:
@@ -3055,25 +3055,6 @@ protected:
virtual void accept0(ASTVisitor *visitor);
};
-class CPLUSPLUS_EXPORT ObjCMethodDefinitionAST: public DeclarationAST
-{
-public:
- ObjCMethodPrototypeAST *method_prototype;
- StatementAST *function_body;
-
-public:
- virtual ObjCMethodDefinitionAST *asObjCMethodDefinition()
- { return this; }
-
- virtual unsigned firstToken() const;
- virtual unsigned lastToken() const;
-
- virtual ObjCMethodDefinitionAST *clone(MemoryPool *pool) const;
-
-protected:
- virtual void accept0(ASTVisitor *visitor);
-};
-
class CPLUSPLUS_EXPORT ObjCClassImplementationAST: public DeclarationAST
{
public:
diff --git a/src/shared/cplusplus/ASTClone.cpp b/src/shared/cplusplus/ASTClone.cpp
index a5167a59d4..de0be8287d 100644
--- a/src/shared/cplusplus/ASTClone.cpp
+++ b/src/shared/cplusplus/ASTClone.cpp
@@ -1461,15 +1461,8 @@ ObjCMethodDeclarationAST *ObjCMethodDeclarationAST::clone(MemoryPool *pool) cons
{
ObjCMethodDeclarationAST *ast = new (pool) ObjCMethodDeclarationAST;
if (method_prototype) ast->method_prototype = method_prototype->clone(pool);
- ast->semicolon_token = semicolon_token;
- return ast;
-}
-
-ObjCMethodDefinitionAST *ObjCMethodDefinitionAST::clone(MemoryPool *pool) const
-{
- ObjCMethodDefinitionAST *ast = new (pool) ObjCMethodDefinitionAST;
- if (method_prototype) ast->method_prototype = method_prototype->clone(pool);
if (function_body) ast->function_body = function_body->clone(pool);
+ ast->semicolon_token = semicolon_token;
return ast;
}
diff --git a/src/shared/cplusplus/ASTVisit.cpp b/src/shared/cplusplus/ASTVisit.cpp
index de05b380c1..2d4b4c2cc2 100644
--- a/src/shared/cplusplus/ASTVisit.cpp
+++ b/src/shared/cplusplus/ASTVisit.cpp
@@ -1406,16 +1406,6 @@ void ObjCMethodDeclarationAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) {
// visit ObjCMethodDeclarationAST
accept(method_prototype, visitor);
- // visit DeclarationAST
- }
- visitor->endVisit(this);
-}
-
-void ObjCMethodDefinitionAST::accept0(ASTVisitor *visitor)
-{
- if (visitor->visit(this)) {
- // visit ObjCMethodDefinitionAST
- accept(method_prototype, visitor);
accept(function_body, visitor);
// visit DeclarationAST
}
diff --git a/src/shared/cplusplus/ASTVisitor.h b/src/shared/cplusplus/ASTVisitor.h
index 6a7c720686..661874cc07 100644
--- a/src/shared/cplusplus/ASTVisitor.h
+++ b/src/shared/cplusplus/ASTVisitor.h
@@ -221,7 +221,6 @@ public:
virtual bool visit(ObjCPropertyDeclarationAST *) { return true; }
virtual bool visit(ObjCMethodPrototypeAST *) { return true; }
virtual bool visit(ObjCMethodDeclarationAST *) { return true; }
- virtual bool visit(ObjCMethodDefinitionAST *) { return true; }
virtual bool visit(ObjCMessageArgumentDeclarationListAST *) { return true; }
virtual bool visit(ObjCMessageArgumentDeclarationAST *) { return true; }
virtual bool visit(ObjCClassImplementationAST *) { return true; }
@@ -363,7 +362,6 @@ public:
virtual void endVisit(ObjCPropertyDeclarationAST *) { }
virtual void endVisit(ObjCMethodPrototypeAST *) { }
virtual void endVisit(ObjCMethodDeclarationAST *) { }
- virtual void endVisit(ObjCMethodDefinitionAST *) { }
virtual void endVisit(ObjCMessageArgumentDeclarationListAST *) { }
virtual void endVisit(ObjCMessageArgumentDeclarationAST *) { }
virtual void endVisit(ObjCClassImplementationAST *) { }
diff --git a/src/shared/cplusplus/ASTfwd.h b/src/shared/cplusplus/ASTfwd.h
index a269713e9b..c336650dae 100644
--- a/src/shared/cplusplus/ASTfwd.h
+++ b/src/shared/cplusplus/ASTfwd.h
@@ -195,7 +195,6 @@ class ObjCPropertyAttributeListAST;
class ObjCPropertyAttributeAST;
class ObjCMethodPrototypeAST;
class ObjCMethodDeclarationAST;
-class ObjCMethodDefinitionAST;
class ObjCMessageArgumentDeclarationListAST;
class ObjCMessageArgumentDeclarationAST;
class ObjCCategoryImplementationAST;
diff --git a/src/shared/cplusplus/CheckDeclaration.cpp b/src/shared/cplusplus/CheckDeclaration.cpp
index f3157e7bc6..f82394548c 100644
--- a/src/shared/cplusplus/CheckDeclaration.cpp
+++ b/src/shared/cplusplus/CheckDeclaration.cpp
@@ -595,33 +595,7 @@ bool CheckDeclaration::visit(ObjCMethodDeclarationAST *ast)
_scope->enterSymbol(symbol);
- return false;
-}
-
-bool CheckDeclaration::visit(ObjCMethodDefinitionAST *ast)
-{
- if (!ast->method_prototype)
- return false;
-
- FullySpecifiedType ty = semantic()->check(ast->method_prototype, _scope);
- Function *fun = ty.type()->asFunctionType();
- if (!fun)
- return false;
-
- Declaration *symbol = control()->newDeclaration(ast->firstToken(), fun->name());
- symbol->setStartOffset(tokenAt(ast->firstToken()).offset);
- symbol->setEndOffset(tokenAt(ast->lastToken()).offset);
-
- symbol->setType(fun->returnType());
-
- symbol->setVisibility(semantic()->currentVisibility());
-
- if (semantic()->isObjCClassMethod(ast->method_prototype->method_type_token))
- symbol->setStorage(Symbol::Static);
-
- _scope->enterSymbol(symbol);
-
- if (! semantic()->skipFunctionBodies()) {
+ if (ast->function_body && !semantic()->skipFunctionBodies()) {
semantic()->check(ast->function_body, fun->members());
}
diff --git a/src/shared/cplusplus/CheckDeclaration.h b/src/shared/cplusplus/CheckDeclaration.h
index b1880c5377..97c4d5ff44 100644
--- a/src/shared/cplusplus/CheckDeclaration.h
+++ b/src/shared/cplusplus/CheckDeclaration.h
@@ -96,7 +96,6 @@ protected:
virtual bool visit(ObjCClassDeclarationAST *ast);
virtual bool visit(ObjCClassInterfaceDefinitionAST *ast);
virtual bool visit(ObjCMethodDeclarationAST *ast);
- virtual bool visit(ObjCMethodDefinitionAST *ast);
virtual bool visit(ObjCVisibilityDeclarationAST *ast);
private:
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index 70bc64ae3d..c4eb17ab64 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -4321,20 +4321,18 @@ bool Parser::parseObjCMethodDefinition(DeclarationAST *&node)
if (! parseObjCMethodPrototype(method_prototype))
return false;
+ ObjCMethodDeclarationAST *ast = new (_pool) ObjCMethodDeclarationAST;
+ ast->method_prototype = method_prototype;
+
if (LA() == T_SEMICOLON) {
// method declaration:
- ObjCMethodDeclarationAST *ast = new (_pool) ObjCMethodDeclarationAST;
- ast->method_prototype = method_prototype;
ast->semicolon_token = consumeToken();
- node = ast;
} else {
// method definition:
- ObjCMethodDefinitionAST *ast = new (_pool) ObjCMethodDefinitionAST;
- ast->method_prototype = method_prototype;
parseFunctionBody(ast->function_body);
- node = ast;
}
+ node = ast;
return true;
}
@@ -4567,10 +4565,14 @@ bool Parser::parseObjCMethodPrototype(ObjCMethodPrototypeAST *&node)
DeclarationAST *parameter_declaration = 0;
parseParameterDeclaration(parameter_declaration);
}
+
+ node = ast;
} else if (lookAtObjCSelector()) {
ObjCSelectorWithoutArgumentsAST *sel = new (_pool) ObjCSelectorWithoutArgumentsAST;
parseObjCSelector(sel->name_token);
ast->selector = sel;
+
+ node = ast;
} else {
_translationUnit->error(cursor(), "expected a selector");
}
@@ -4579,7 +4581,6 @@ bool Parser::parseObjCMethodPrototype(ObjCMethodPrototypeAST *&node)
while (parseAttributeSpecifier(*attr))
attr = &(*attr)->next;
- node = ast;
return true;
}