summaryrefslogtreecommitdiff
path: root/shared/cplusplus/Parser.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <qtc-committer@nokia.com>2009-01-12 15:20:24 +0100
committerRoberto Raggi <qtc-committer@nokia.com>2009-01-12 15:20:24 +0100
commite0eead09977fb2829e72485663e6eab8bbe495b4 (patch)
treebb4936cc74b35c3928caf288b8f3ca242a621505 /shared/cplusplus/Parser.cpp
parent03811b68a44cc591639b4b671cf3bf54bbad1382 (diff)
downloadqt-creator-e0eead09977fb2829e72485663e6eab8bbe495b4.tar.gz
Parse ObjC++ class and category implementations.
Diffstat (limited to 'shared/cplusplus/Parser.cpp')
-rw-r--r--shared/cplusplus/Parser.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/shared/cplusplus/Parser.cpp b/shared/cplusplus/Parser.cpp
index 6901b787e8..407cbc36fd 100644
--- a/shared/cplusplus/Parser.cpp
+++ b/shared/cplusplus/Parser.cpp
@@ -413,6 +413,9 @@ bool Parser::parseDeclaration(DeclarationAST *&node)
case T_AT_PROTOCOL:
return parseObjCProtocol(node);
+ case T_AT_IMPLEMENTATION:
+ return parseObjCImplementation(node);
+
case T_AT_END:
return parseObjCEnd(node);
@@ -3456,6 +3459,40 @@ bool Parser::parseObjCProtocol(DeclarationAST *&,
return true;
}
+// objc-implementation ::= T_AT_IMPLEMENTAION T_IDENTIFIER (T_COLON T_IDENTIFIER)?
+// objc-class-instance-variables-opt
+// objc-implementation ::= T_AT_IMPLEMENTAION T_IDENTIFIER T_LPAREN T_IDENTIFIER T_RPAREN
+//
+bool Parser::parseObjCImplementation(DeclarationAST *&)
+{
+ if (LA() != T_AT_IMPLEMENTATION)
+ return false;
+
+ consumeToken();
+
+ unsigned identifier_token = 0;
+ match(T_IDENTIFIER, &identifier_token);
+
+ if (LA() == T_LPAREN) {
+ // a category implementation
+ unsigned lparen_token = 0, rparen_token = 0;
+ unsigned category_name_token = 0;
+ match(T_LPAREN, &lparen_token);
+ match(T_IDENTIFIER, &category_name_token);
+ match(T_RPAREN, &rparen_token);
+ return true;
+ }
+
+ // a class implementation
+ if (LA() == T_COLON) {
+ consumeToken();
+ unsigned super_class_name_token = 0;
+ match(T_IDENTIFIER, &super_class_name_token);
+ }
+
+ parseObjClassInstanceVariables();
+ return true;
+}
// objc-protocol-refs ::= T_LESS (T_IDENTIFIER @ T_COMMA) T_GREATER
//