summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libs/cplusplus/CppDocument.cpp2
-rw-r--r--src/libs/cplusplus/ResolveExpression.cpp24
-rw-r--r--src/libs/cplusplus/TypeOfExpression.cpp1
3 files changed, 11 insertions, 16 deletions
diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp
index 64654030f2..bd93b8bb31 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 7fa9751f1c..9124087b6c 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 7d2d7ffdb0..a2a7b58f9a 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,