diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2010-08-13 14:47:12 +0200 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2010-08-13 14:47:12 +0200 |
commit | 962a9eb4da48e67a1b131ad1cbb57f224418e883 (patch) | |
tree | d969cf689c6da77cd191981d46fdfeab86c89d17 /src/shared/cplusplus/Bind.cpp | |
parent | 72c806ab34a8fa9a0f4b0509e7d8fc10d4f4408e (diff) | |
download | qt-creator-962a9eb4da48e67a1b131ad1cbb57f224418e883.tar.gz |
More work on the objc class and declaration symbols.
Diffstat (limited to 'src/shared/cplusplus/Bind.cpp')
-rw-r--r-- | src/shared/cplusplus/Bind.cpp | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/src/shared/cplusplus/Bind.cpp b/src/shared/cplusplus/Bind.cpp index c83f45a60f..6522b69a82 100644 --- a/src/shared/cplusplus/Bind.cpp +++ b/src/shared/cplusplus/Bind.cpp @@ -69,6 +69,7 @@ Bind::Bind(TranslationUnit *unit) _name(0), _declaratorId(0), _visibility(Symbol::Public), + _objcVisibility(Symbol::Public), _methodKey(Function::NormalMethod), _skipFunctionBodies(false) { @@ -135,6 +136,12 @@ int Bind::switchVisibility(int visibility) return visibility; } +int Bind::switchObjCVisibility(int visibility) +{ + std::swap(_objcVisibility, visibility); + return visibility; +} + int Bind::switchMethodKey(int methodKey) { std::swap(_methodKey, methodKey); @@ -2113,10 +2120,17 @@ bool Bind::visit(ObjCClassDeclarationAST *ast) } this->objCProtocolRefs(ast->protocol_refs, klass); + + const int previousObjCVisibility = switchObjCVisibility(Function::Protected); + this->objCInstanceVariablesDeclaration(ast->inst_vars_decl, klass); + + (void) switchObjCVisibility(Function::Public); for (DeclarationListAST *it = ast->member_declaration_list; it; it = it->next) { this->declaration(it->value); } + + (void) switchObjCVisibility(previousObjCVisibility); (void) switchScope(previousScope); return false; } @@ -2175,18 +2189,21 @@ bool Bind::visit(ObjCProtocolDeclarationAST *ast) _scope->addMember(protocol); Scope *previousScope = switchScope(protocol); + const int previousObjCVisibility = switchObjCVisibility(Function::Public); + this->objCProtocolRefs(ast->protocol_refs, protocol); for (DeclarationListAST *it = ast->member_declaration_list; it; it = it->next) { this->declaration(it->value); } + + (void) switchObjCVisibility(previousObjCVisibility); (void) switchScope(previousScope); return false; } bool Bind::visit(ObjCVisibilityDeclarationAST *ast) { - (void) ast; - // unsigned visibility_token = ast->visibility_token; + _objcVisibility = visibilityForObjCAccessSpecifier(tokenKind(ast->visibility_token)); return false; } @@ -2798,3 +2815,19 @@ int Bind::visibilityForClassKey(int tokenKind) return Symbol::Public; } } + +int Bind::visibilityForObjCAccessSpecifier(int tokenKind) +{ + switch (tokenKind) { + case T_AT_PUBLIC: + return Symbol::Public; + case T_AT_PROTECTED: + return Symbol::Protected; + case T_AT_PRIVATE: + return Symbol::Private; + case T_AT_PACKAGE: + return Symbol::Package; + default: + return Symbol::Protected; + } +} |