diff options
| author | Erik Verbruggen <[email protected]> | 2010-05-20 18:37:12 +0200 |
|---|---|---|
| committer | Erik Verbruggen <[email protected]> | 2010-05-20 18:37:12 +0200 |
| commit | b9ac631b4aca01f31f4e53254c9c35ca3ea3fe9c (patch) | |
| tree | 102be3e7e6542b4e32f522417b51eb6ba91851f2 /src/libs/cplusplus | |
| parent | 576a8ae799c85a50359ccb221b26793dd64693c2 (diff) | |
Fixed expression resolving for ObjC message send expressions.
Diffstat (limited to 'src/libs/cplusplus')
| -rw-r--r-- | src/libs/cplusplus/ResolveExpression.cpp | 35 |
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 } |
