C++: code completion for lambda calls

support for lambdas, e.g.:
struct S { int bar; };
[]() { return new S; } ()->bar;
[] { return new S; } ()->bar;
[]() ->S* { return new S(); } ()->bar;
[]() throw() { return new S(); } ()->bar;
[]() throw()->S* { return new S(); } ()->bar;

Task-number: QTCREATORBUG-9523
Change-Id: I43fbf6f0ee0bb11411c53c984df75ef33a276466
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
This commit is contained in:
Przemyslaw Gorszkowski
2013-06-25 15:41:17 +02:00
committed by Erik Verbruggen
parent ab15d38726
commit 46461fc183
5 changed files with 185 additions and 0 deletions

View File

@@ -366,6 +366,18 @@ bool ResolveExpression::visit(CompoundExpressionAST *ast)
return false;
}
bool ResolveExpression::visit(LambdaExpressionAST *ast)
{
accept(ast->statement);
return false;
}
bool ResolveExpression::visit(ReturnStatementAST *ast)
{
accept(ast->expression);
return false;
}
bool ResolveExpression::visit(NestedExpressionAST *ast)
{
accept(ast->expression);
@@ -626,6 +638,11 @@ bool ResolveExpression::visit(CallAST *ast)
{
const QList<LookupItem> baseResults = resolve(ast->base_expression, _scope);
if (ast->base_expression->asLambdaExpression()) {
_results = baseResults;
return false;
}
// Compute the types of the actual arguments.
unsigned actualArgumentCount = 0;