diff options
author | Oswald Buddenhagen <oswald.buddenhagen@nokia.com> | 2009-07-16 18:11:09 +0200 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@nokia.com> | 2009-07-21 14:07:19 +0200 |
commit | 81baf03476340a94adc49bfb2f7a6d57c078f5f6 (patch) | |
tree | 374f4f464fb109649da6a49c49a8ecf50ddfcc4f /src/shared | |
parent | 67e30ed8c95c9351d7c3700fabdb139420a0593a (diff) | |
download | qt-creator-81baf03476340a94adc49bfb2f7a6d57c078f5f6.tar.gz |
inline parseLine()
this should be marginally faster and it allows turning a few members
into locals.
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/proparser/profileevaluator.cpp | 188 |
1 files changed, 86 insertions, 102 deletions
diff --git a/src/shared/proparser/profileevaluator.cpp b/src/shared/proparser/profileevaluator.cpp index 5fac6f24dd..32a2b6f1ca 100644 --- a/src/shared/proparser/profileevaluator.cpp +++ b/src/shared/proparser/profileevaluator.cpp @@ -139,7 +139,6 @@ public: ProBlock *currentBlock(); void updateItem(); - void parseLine(const QString &line); void insertVariable(const ushort **pCur, const ushort *end); void insertOperator(const char op); void insertComment(const QString &comment); @@ -154,9 +153,6 @@ public: QString m_proitem; QString m_pendingComment; ushort *m_proitemPtr; - bool m_contNextLine; - bool m_inQuote; - int m_parens; enum StrState { NotStarted, Started, PutSpace }; @@ -287,117 +283,105 @@ bool ProFileEvaluator::Private::read(ProFile *pro, QTextStream *ts) // Parser state m_block = 0; m_commentItem = 0; - m_inQuote = false; - m_parens = 0; - m_contNextLine = false; m_lineNo = 1; m_blockstack.clear(); m_blockstack.push(pro); + int parens = 0; + bool inQuote = false; + bool escaped = false; while (!ts->atEnd()) { QString line = ts->readLine(); - parseLine(line); - ++m_lineNo; - } - return true; -} - -void ProFileEvaluator::Private::parseLine(const QString &line) -{ - const ushort *cur = (const ushort *)line.unicode(), - *end = cur + line.length(); - int parens = m_parens; - bool inQuote = m_inQuote; - bool escaped = false; - - m_proitem.reserve(line.length()); - m_proitemPtr = (ushort *)m_proitem.unicode(); - nextItem: - ushort *ptr = m_proitemPtr; - StrState sts = NotStarted; - while (cur < end) { - ushort c = *cur++; - if (c == '#') { // Yep - no escaping possible - m_proitemPtr = ptr; - insertComment(line.right(end - cur).simplified()); - goto done; - } - if (!escaped) { - if (c == '\\') { - escaped = true; - goto putch; - } else if (c == '"') { - inQuote = !inQuote; - goto putch; - } - } else { - escaped = false; - } - if (!inQuote) { - if (c == '(') { - ++parens; - } else if (c == ')') { - --parens; - } else if (!parens) { - if (m_block && (m_block->blockKind() & ProBlock::VariableKind)) { - if (c == ' ' || c == '\t') { - m_proitemPtr = ptr; - updateItem(); - goto nextItem; - } - } else { - if (c == ':') { - m_proitemPtr = ptr; - enterScope(false); - goto nextItem; - } - if (c == '{') { - m_proitemPtr = ptr; - enterScope(true); - goto nextItem; - } - if (c == '}') { - m_proitemPtr = ptr; - leaveScope(); - goto nextItem; - } - if (c == '=') { - m_proitemPtr = ptr; - insertVariable(&cur, end); - goto nextItem; - } - if (c == '|' || c == '!') { - m_proitemPtr = ptr; - insertOperator(c); - goto nextItem; + const ushort *cur = (const ushort *)line.unicode(), + *end = cur + line.length(); + m_proitem.reserve(line.length()); + m_proitemPtr = (ushort *)m_proitem.unicode(); + nextItem: + ushort *ptr = m_proitemPtr; + StrState sts = NotStarted; + while (cur < end) { + ushort c = *cur++; + if (c == '#') { // Yep - no escaping possible + m_proitemPtr = ptr; + insertComment(line.right(end - cur).simplified()); + goto done; + } + if (!escaped) { + if (c == '\\') { + escaped = true; + goto putch; + } else if (c == '"') { + inQuote = !inQuote; + goto putch; + } + } else { + escaped = false; + } + if (!inQuote) { + if (c == '(') { + ++parens; + } else if (c == ')') { + --parens; + } else if (!parens) { + if (m_block && (m_block->blockKind() & ProBlock::VariableKind)) { + if (c == ' ' || c == '\t') { + m_proitemPtr = ptr; + updateItem(); + goto nextItem; + } + } else { + if (c == ':') { + m_proitemPtr = ptr; + enterScope(false); + goto nextItem; + } + if (c == '{') { + m_proitemPtr = ptr; + enterScope(true); + goto nextItem; + } + if (c == '}') { + m_proitemPtr = ptr; + leaveScope(); + goto nextItem; + } + if (c == '=') { + m_proitemPtr = ptr; + insertVariable(&cur, end); + goto nextItem; + } + if (c == '|' || c == '!') { + m_proitemPtr = ptr; + insertOperator(c); + goto nextItem; + } } } } - } - if (c == ' ' || c == '\t') { - if (sts == Started) - sts = PutSpace; + if (c == ' ' || c == '\t') { + if (sts == Started) + sts = PutSpace; + } else { + putch: + if (sts == PutSpace) + *ptr++ = ' '; + *ptr++ = c; + sts = Started; + } + } + m_proitemPtr = ptr; + done: + if (escaped) { + --m_proitemPtr; + updateItem(); } else { - putch: - if (sts == PutSpace) - *ptr++ = ' '; - *ptr++ = c; - sts = Started; + updateItem(); + finalizeBlock(); } + ++m_lineNo; } - m_proitemPtr = ptr; - m_contNextLine = escaped; - done: - m_inQuote = inQuote; - m_parens = parens; - if (m_contNextLine) { - --m_proitemPtr; - updateItem(); - } else { - updateItem(); - finalizeBlock(); - } + return true; } void ProFileEvaluator::Private::finalizeBlock() |