summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/Parser.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@nokia.com>2009-07-16 14:31:13 +0200
committerErik Verbruggen <erik.verbruggen@nokia.com>2009-07-16 14:31:13 +0200
commitfa03d4698417fa7b6d1dd2929756a1e9e394d0af (patch)
treeae4757854b2499414a0a39a641b01eef6f838e8f /src/shared/cplusplus/Parser.cpp
parentbe69b8256ae4baec1feaa9a33f69d5cb0fb3839a (diff)
downloadqt-creator-fa03d4698417fa7b6d1dd2929756a1e9e394d0af.tar.gz
Added ObjC @interface and @implementation member declarations.
Diffstat (limited to 'src/shared/cplusplus/Parser.cpp')
-rw-r--r--src/shared/cplusplus/Parser.cpp40
1 files changed, 23 insertions, 17 deletions
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index 571ceaa074..723c99fb1e 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -3981,7 +3981,7 @@ bool Parser::parseObjCInterface(DeclarationAST *&node,
}
parseObjCProtocolRefs(ast->protocol_refs);
- parseObjClassInstanceVariables();
+ parseObjClassInstanceVariables(ast->inst_vars_decl);
while (parseObjCInterfaceMemberDeclaration()) {
}
match(T_AT_END, &(ast->end_token));
@@ -4081,7 +4081,8 @@ bool Parser::parseObjCImplementation(DeclarationAST *&)
match(T_IDENTIFIER, &super_class_name_token);
}
- parseObjClassInstanceVariables();
+ ObjCInstanceVariablesDeclarationAST *inst_vars_decl;
+ parseObjClassInstanceVariables(inst_vars_decl);
parseObjCMethodDefinitionList();
return true;
}
@@ -4221,22 +4222,22 @@ bool Parser::parseObjCProtocolRefs(ObjCProtocolRefsAST *&node)
// objc-instance-variable-decl-list-opt
// T_RBRACE
//
-bool Parser::parseObjClassInstanceVariables()
+bool Parser::parseObjClassInstanceVariables(ObjCInstanceVariablesDeclarationAST *&node)
{
if (LA() != T_LBRACE)
return false;
- unsigned lbrace_token = 0, rbrace_token = 0;
+ ObjCInstanceVariablesDeclarationAST *ast = new (_pool) ObjCInstanceVariablesDeclarationAST;
+ match(T_LBRACE, &(ast->lbrace_token));
- match(T_LBRACE, &lbrace_token);
- while (LA()) {
+ for (ObjCInstanceVariableListAST **next = &(ast->instance_variables); LA(); next = &((*next)->next)) {
if (LA() == T_RBRACE)
break;
const unsigned start = cursor();
- DeclarationAST *declaration = 0;
- parseObjCInstanceVariableDeclaration(declaration);
+ *next = new (_pool) ObjCInstanceVariableListAST;
+ parseObjCInstanceVariableDeclaration((*next)->declaration);
if (start == cursor()) {
// skip stray token.
@@ -4245,7 +4246,9 @@ bool Parser::parseObjClassInstanceVariables()
}
}
- match(T_RBRACE, &rbrace_token);
+ match(T_RBRACE, &(ast->rbrace_token));
+
+ node = ast;
return true;
}
@@ -4300,15 +4303,18 @@ bool Parser::parseObjCInterfaceMemberDeclaration()
bool Parser::parseObjCInstanceVariableDeclaration(DeclarationAST *&node)
{
switch (LA()) {
- case T_AT_PRIVATE:
- case T_AT_PROTECTED:
- case T_AT_PUBLIC:
- case T_AT_PACKAGE:
- consumeToken();
- return true;
+ case T_AT_PRIVATE:
+ case T_AT_PROTECTED:
+ case T_AT_PUBLIC:
+ case T_AT_PACKAGE: {
+ ObjCVisibilityDeclarationAST *ast = new (_pool) ObjCVisibilityDeclarationAST;
+ ast->visibility_token = consumeToken();
+ node = ast;
+ return true;
+ }
- default:
- return parseSimpleDeclaration(node, true);
+ default:
+ return parseSimpleDeclaration(node, true);
}
}