aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/cplusplus/ResolveExpression.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <[email protected]>2010-05-20 18:37:12 +0200
committerErik Verbruggen <[email protected]>2010-05-20 18:37:12 +0200
commitb9ac631b4aca01f31f4e53254c9c35ca3ea3fe9c (patch)
tree102be3e7e6542b4e32f522417b51eb6ba91851f2 /src/libs/cplusplus/ResolveExpression.cpp
parent576a8ae799c85a50359ccb221b26793dd64693c2 (diff)
Fixed expression resolving for ObjC message send expressions.
Diffstat (limited to 'src/libs/cplusplus/ResolveExpression.cpp')
-rw-r--r--src/libs/cplusplus/ResolveExpression.cpp35
1 files changed, 12 insertions, 23 deletions
diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp
index dc7ccbf04c8..a6b5203f233 100644
--- a/src/libs/cplusplus/ResolveExpression.cpp
+++ b/src/libs/cplusplus/ResolveExpression.cpp
@@ -649,41 +649,30 @@ bool ResolveExpression::visit(PostIncrDecrAST *)
return false;
}
-bool ResolveExpression::visit(ObjCMessageExpressionAST *)
+bool ResolveExpression::visit(ObjCMessageExpressionAST *ast)
{
- qWarning() << "TODO" << Q_FUNC_INFO;
- return false;
-
-#if 0
const QList<LookupItem> receiverResults = resolve(ast->receiver_expression);
- if (!receiverResults.isEmpty()) {
- LookupItem result = receiverResults.first();
+ foreach (const LookupItem &result, receiverResults) {
FullySpecifiedType ty = result.type().simplified();
- const Name *klassName = 0;
+ ClassOrNamespace *binding = 0;
- if (const ObjCClass *classTy = ty->asObjCClassType()) {
+ if (ObjCClass *clazz = ty->asObjCClassType()) {
// static access, e.g.:
- // [NSObject description];
- klassName = classTy->name();
- } else if (const PointerType *ptrTy = ty->asPointerType()) {
- const FullySpecifiedType pointeeTy = ptrTy->elementType();
- if (pointeeTy && pointeeTy->isNamedType()) {
+ // [NSObject description];
+ binding = _context.lookupType(clazz);
+ } else if (PointerType *ptrTy = ty->asPointerType()) {
+ if (NamedType *namedTy = ptrTy->asNamedType()) {
// dynamic access, e.g.:
- // NSObject *obj = ...; [obj release];
- klassName = pointeeTy->asNamedType()->name();
+ // NSObject *obj = ...; [obj release];
+ binding = _context.lookupType(namedTy->name(), result.scope());
}
}
- if (klassName&&ast->selector && ast->selector->name) {
- const QList<Symbol *> resolvedSymbols = _context.lookup(klassName, result.scope());
- foreach (Symbol *resolvedSymbol, resolvedSymbols)
- if (ObjCClass *klass = resolvedSymbol->asObjCClass())
- _results.append(resolveMember(ast->selector->name, klass));
- }
+ if (binding)
+ addResults(binding->lookup(ast->selector->name));
}
return false;
-#endif
}