diff options
author | Erik Verbruggen <erik.verbruggen@nokia.com> | 2009-08-04 16:22:24 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@nokia.com> | 2009-08-04 16:22:24 +0200 |
commit | e53d23d55c7df81f47f3b8ee78ed2c5863acf083 (patch) | |
tree | 4552e25864eafba55d27e78106ca29d44e1a20fb /src/shared/cplusplus | |
parent | 86ff16e58cac3e85ffe685053b4314c565ecdfb1 (diff) | |
download | qt-creator-e53d23d55c7df81f47f3b8ee78ed2c5863acf083.tar.gz |
Merged ObjCMethodDefinitionAST into ObjCMethodDeclarationAST.
Diffstat (limited to 'src/shared/cplusplus')
-rw-r--r-- | src/shared/cplusplus/AST.cpp | 14 | ||||
-rw-r--r-- | src/shared/cplusplus/AST.h | 21 | ||||
-rw-r--r-- | src/shared/cplusplus/ASTClone.cpp | 9 | ||||
-rw-r--r-- | src/shared/cplusplus/ASTVisit.cpp | 10 | ||||
-rw-r--r-- | src/shared/cplusplus/ASTVisitor.h | 2 | ||||
-rw-r--r-- | src/shared/cplusplus/ASTfwd.h | 1 | ||||
-rw-r--r-- | src/shared/cplusplus/CheckDeclaration.cpp | 28 | ||||
-rw-r--r-- | src/shared/cplusplus/CheckDeclaration.h | 1 | ||||
-rw-r--r-- | src/shared/cplusplus/Parser.cpp | 15 |
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; } |