summaryrefslogtreecommitdiff
path: root/shared/cplusplus/TranslationUnit.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <qtc-committer@nokia.com>2008-12-03 14:01:19 +0100
committerRoberto Raggi <qtc-committer@nokia.com>2008-12-03 14:01:58 +0100
commite2e4fcd95b39fb00d132d4018eac15fcfcf9c228 (patch)
tree953e9e198cdcf06cd6f87feb8c3a9f961f4d0bfd /shared/cplusplus/TranslationUnit.cpp
parent4222fae24b8cf0f914da032ce4d7ae2b03917bb1 (diff)
downloadqt-creator-e2e4fcd95b39fb00d132d4018eac15fcfcf9c228.tar.gz
Added different parsing mode to TranslationUnit/CppDocument.
Diffstat (limited to 'shared/cplusplus/TranslationUnit.cpp')
-rw-r--r--shared/cplusplus/TranslationUnit.cpp40
1 files changed, 36 insertions, 4 deletions
diff --git a/shared/cplusplus/TranslationUnit.cpp b/shared/cplusplus/TranslationUnit.cpp
index 896ab7d1a5..bc4d219e0f 100644
--- a/shared/cplusplus/TranslationUnit.cpp
+++ b/shared/cplusplus/TranslationUnit.cpp
@@ -146,7 +146,7 @@ unsigned TranslationUnit::matchingBrace(unsigned index) const
MemoryPool *TranslationUnit::memoryPool() const
{ return _pool; }
-TranslationUnitAST *TranslationUnit::ast() const
+AST *TranslationUnit::ast() const
{ return _ast; }
bool TranslationUnit::isTokenized() const
@@ -218,17 +218,49 @@ bool TranslationUnit::skipFunctionBody() const
void TranslationUnit::setSkipFunctionBody(bool skipFunctionBody)
{ _skipFunctionBody = skipFunctionBody; }
-void TranslationUnit::parse()
+bool TranslationUnit::parse(ParseMode mode)
{
if (isParsed())
- return;
+ return false;
if (! isTokenized())
tokenize();
Parser parser(this);
parser.setQtMocRunEnabled(_qtMocRunEnabled);
- parser.parseTranslationUnit(_ast);
+
+ bool parsed = false;
+
+ switch (mode) {
+ case ParseTranlationUnit: {
+ TranslationUnitAST *node = 0;
+ parsed = parser.parseTranslationUnit(node);
+ _ast = node;
+ } break;
+
+ case ParseDeclaration: {
+ DeclarationAST *node = 0;
+ parsed = parser.parseDeclaration(node);
+ _ast = node;
+ } break;
+
+ case ParseExpression: {
+ ExpressionAST *node = 0;
+ parsed = parser.parseExpression(node);
+ _ast = node;
+ } break;
+
+ case ParseStatement: {
+ StatementAST *node = 0;
+ parsed = parser.parseStatement(node);
+ _ast = node;
+ } break;
+
+ default:
+ break;
+ } // switch
+
+ return parsed;
}
void TranslationUnit::pushLineOffset(unsigned offset)