summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/CheckDeclaration.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-10-28 16:06:26 +0100
committerRoberto Raggi <roberto.raggi@nokia.com>2009-10-28 16:06:40 +0100
commitb921489a577ef29f9687fa2cea5d2f0d67740db1 (patch)
treedd282648f2656005f19801be314c1e5a40057aec /src/shared/cplusplus/CheckDeclaration.cpp
parent084d83a58479e233b535c162c780880ae353312f (diff)
downloadqt-creator-b921489a577ef29f9687fa2cea5d2f0d67740db1.tar.gz
Process exception declarations.
Diffstat (limited to 'src/shared/cplusplus/CheckDeclaration.cpp')
-rw-r--r--src/shared/cplusplus/CheckDeclaration.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/shared/cplusplus/CheckDeclaration.cpp b/src/shared/cplusplus/CheckDeclaration.cpp
index 7e7d01d907..1e7afdd166 100644
--- a/src/shared/cplusplus/CheckDeclaration.cpp
+++ b/src/shared/cplusplus/CheckDeclaration.cpp
@@ -263,8 +263,29 @@ bool CheckDeclaration::visit(AsmDefinitionAST *)
return false;
}
-bool CheckDeclaration::visit(ExceptionDeclarationAST *)
+bool CheckDeclaration::visit(ExceptionDeclarationAST *ast)
{
+ FullySpecifiedType ty = semantic()->check(ast->type_specifier, _scope);
+ FullySpecifiedType qualTy = ty.qualifiedType();
+
+ Name *name = 0;
+ FullySpecifiedType declTy = semantic()->check(ast->declarator, qualTy,
+ _scope, &name);
+
+ unsigned location = locationOfDeclaratorId(ast->declarator);
+ if (! location) {
+ if (ast->declarator)
+ location = ast->declarator->firstToken();
+ else
+ location = ast->firstToken();
+ }
+
+ Declaration *symbol = control()->newDeclaration(location, name);
+ symbol->setStartOffset(tokenAt(ast->firstToken()).offset);
+ symbol->setEndOffset(tokenAt(ast->lastToken()).offset);
+ symbol->setType(declTy);
+ _scope->enterSymbol(symbol);
+
return false;
}