From 873838fe3a000daf3bcd22e8aebd61634effd471 Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Wed, 17 Jun 2009 11:11:21 +0200 Subject: [PATCH] Simplified TypeOf/ResolveExpression. --- src/libs/cplusplus/CppDocument.cpp | 2 ++ src/libs/cplusplus/ResolveExpression.cpp | 24 ++++++++---------------- src/libs/cplusplus/TypeOfExpression.cpp | 1 + 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp index 64654030f28..bd93b8bb318 100644 --- a/src/libs/cplusplus/CppDocument.cpp +++ b/src/libs/cplusplus/CppDocument.cpp @@ -329,6 +329,8 @@ void Document::check() for (DeclarationAST *decl = ast->declarations; decl; decl = decl->next) { semantic.check(decl, globals); } + } else if (ExpressionAST *ast = _translationUnit->ast()->asExpression()) { + semantic.check(ast, globals); } } diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp index 7fa9751f1c4..9124087b6c6 100644 --- a/src/libs/cplusplus/ResolveExpression.cpp +++ b/src/libs/cplusplus/ResolveExpression.cpp @@ -259,8 +259,7 @@ bool ResolveExpression::visit(BinaryExpressionAST *ast) bool ResolveExpression::visit(CastExpressionAST *ast) { - Scope dummy; - addResult(sem.check(ast->type_id, &dummy)); + addResult(sem.check(ast->type_id, _context.expressionDocument()->globalSymbols())); return false; } @@ -278,8 +277,7 @@ bool ResolveExpression::visit(ConditionalExpressionAST *) bool ResolveExpression::visit(CppCastExpressionAST *ast) { - Scope dummy; - addResult(sem.check(ast->type_id, &dummy)); + addResult(sem.check(ast->type_id, _context.expressionDocument()->globalSymbols())); return false; } @@ -450,8 +448,7 @@ bool ResolveExpression::visit(CompoundLiteralAST *ast) bool ResolveExpression::visit(QualifiedNameAST *ast) { ResolveClass resolveClass; - Scope dummy; - Name *name = sem.check(ast, &dummy); + Name *name = ast->name; QList<Symbol *> symbols = _context.resolve(name); foreach (Symbol *symbol, symbols) { @@ -485,10 +482,7 @@ bool ResolveExpression::visit(ConversionFunctionIdAST *) bool ResolveExpression::visit(SimpleNameAST *ast) { - Scope dummy; - Name *name = sem.check(ast, &dummy); - - QList<Symbol *> symbols = _context.resolve(name); + QList<Symbol *> symbols = _context.resolve(ast->name); foreach (Symbol *symbol, symbols) addResult(symbol->type(), symbol); @@ -504,10 +498,7 @@ bool ResolveExpression::visit(DestructorNameAST *) bool ResolveExpression::visit(TemplateIdAST *ast) { - Scope dummy; - Name *name = sem.check(ast, &dummy); - - QList<Symbol *> symbols = _context.resolve(name); + QList<Symbol *> symbols = _context.resolve(ast->name); foreach (Symbol *symbol, symbols) addResult(symbol->type(), symbol); @@ -601,8 +592,9 @@ bool ResolveExpression::visit(MemberAccessAST *ast) QList<Result> baseResults = _results; // Evaluate the expression-id that follows the access operator. - Scope dummy; - Name *memberName = sem.check(ast->member_name, &dummy); + Name *memberName = 0; + if (ast->member_name) + memberName = ast->member_name->name; // Remember the access operator. const unsigned accessOp = tokenKind(ast->access_token); diff --git a/src/libs/cplusplus/TypeOfExpression.cpp b/src/libs/cplusplus/TypeOfExpression.cpp index 7d2d7ffdb07..a2a7b58f9a7 100644 --- a/src/libs/cplusplus/TypeOfExpression.cpp +++ b/src/libs/cplusplus/TypeOfExpression.cpp @@ -63,6 +63,7 @@ QList<TypeOfExpression::Result> TypeOfExpression::operator()(const QString &expr if (mode == Preprocess) code = preprocessedExpression(expression, m_snapshot, document); Document::Ptr expressionDoc = documentForExpression(code); + expressionDoc->check(); m_ast = extractExpressionAST(expressionDoc); m_lookupContext = LookupContext(lastVisibleSymbol, expressionDoc, -- GitLab