diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2009-10-28 16:06:26 +0100 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2009-10-28 16:06:40 +0100 |
commit | b921489a577ef29f9687fa2cea5d2f0d67740db1 (patch) | |
tree | dd282648f2656005f19801be314c1e5a40057aec /src/shared/cplusplus/CheckDeclaration.cpp | |
parent | 084d83a58479e233b535c162c780880ae353312f (diff) | |
download | qt-creator-b921489a577ef29f9687fa2cea5d2f0d67740db1.tar.gz |
Process exception declarations.
Diffstat (limited to 'src/shared/cplusplus/CheckDeclaration.cpp')
-rw-r--r-- | src/shared/cplusplus/CheckDeclaration.cpp | 23 |
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; } |