diff options
Diffstat (limited to 'src/plugins/debugger/watchutils.cpp')
-rw-r--r-- | src/plugins/debugger/watchutils.cpp | 173 |
1 files changed, 0 insertions, 173 deletions
diff --git a/src/plugins/debugger/watchutils.cpp b/src/plugins/debugger/watchutils.cpp index a494c0d700..576f29811e 100644 --- a/src/plugins/debugger/watchutils.cpp +++ b/src/plugins/debugger/watchutils.cpp @@ -695,179 +695,6 @@ void QtDumperHelper::parseQueryTypes(const QStringList &l, Debugger debugger) } } -/* A parse for dumper output: - * "iname="local.sl",addr="0x0012BA84",value="<3 items>",valuedisabled="true", - * numchild="3",childtype="QString",childnumchild="0",children=[{name="0",value="<binhex>", - * valueencoded="2"},{name="1",value="dAB3AG8A",valueencoded="2"},{name="2", - * value="dABoAHIAZQBlAA==",valueencoded="2"}]" - * Default implementation can be used for debugging purposes. */ - -class DumperParser -{ -public: - explicit DumperParser(const char *s) : m_s(s) {} - bool run(); - virtual ~DumperParser() {} - -protected: - // handle 'key="value"' - virtual bool handleKeyword(const char *k, int size); - virtual bool handleListStart(); - virtual bool handleListEnd(); - virtual bool handleHashStart(); - virtual bool handleHashEnd(); - virtual bool handleValue(const char *k, int size); - -private: - bool parseHash(int level, const char *&pos); - bool parseValue(int level, const char *&pos); - bool parseStringValue(const char *&ptr, int &size, const char *&pos) const; - - const char *m_s; -}; - -// get a string value with pos at the opening double quote -bool DumperParser::parseStringValue(const char *&ptr, int &size, const char *&pos) const -{ - pos++; - const char *endValuePtr = strchr(pos, '"'); - if (!endValuePtr) - return false; - size = endValuePtr - pos; - ptr = pos; - pos = endValuePtr + 1; - return true; -} - -bool DumperParser::run() -{ - const char *ptr = m_s; - const bool rc = parseHash(0, ptr); - if (debug > 1) - qDebug() << Q_FUNC_INFO << '\n' << m_s << rc; - return rc; -} - -// Parse a non-empty hash with pos at the first keyword. -// Curly braces are present at level 0 only. -// '{a="X", b="X"}' -bool DumperParser::parseHash(int level, const char *&pos) -{ - while (true) { - switch (*pos) { - case '\0': // EOS is acceptable at level 0 only - return level == 0; - case '}': - pos++; - return true; - default: - break; - } - const char *equalsPtr = strchr(pos, '='); - if (!equalsPtr) - return false; - const int keywordLen = equalsPtr - pos; - if (!handleKeyword(pos, keywordLen)) - return false; - pos = equalsPtr + 1; - if (!*pos) - return false; - if (!parseValue(level + 1, pos)) - return false; - if (*pos == ',') - pos++; - } - return false; -} - -bool DumperParser::parseValue(int level, const char *&pos) -{ - // Simple string literal - switch (*pos) { - case '"': { - const char *valuePtr; - int valueSize; - return parseStringValue(valuePtr, valueSize, pos) && handleValue(valuePtr, valueSize); - } - // A List. Note that it has a trailing comma '["a",]' - case '[': { - if (!handleListStart()) - return false; - pos++; - while (true) { - switch (*pos) { - case ']': - pos++; - return handleListEnd(); - case '\0': - return false; - default: - break; - } - if (!parseValue(level + 1, pos)) - return false; - if (*pos == ',') - pos++; - } - } - return false; - // A hash '{a="b",b="c"}' - case '{': { - if (!handleHashStart()) - return false; - pos++; - if (!parseHash(level + 1, pos)) - return false; - return handleHashEnd(); - } - return false; - } - return false; -} - -bool DumperParser::handleKeyword(const char *k, int size) -{ - if (debug > 1) - qDebug() << Q_FUNC_INFO << '\n' << QByteArray(k, size); - return true; -} - -bool DumperParser::handleListStart() -{ - if (debug > 1) - qDebug() << Q_FUNC_INFO; - return true; -} - -bool DumperParser::handleListEnd() -{ - if (debug > 1) - qDebug() << Q_FUNC_INFO; - return true; -} - -bool DumperParser::handleHashStart() -{ - if (debug > 1) - qDebug() << Q_FUNC_INFO; - return true; -} - -bool DumperParser::handleHashEnd() -{ - if (debug > 1) - qDebug() << Q_FUNC_INFO; - - return true; -} - -bool DumperParser::handleValue(const char *k, int size) -{ - if (debug > 1) - qDebug() << Q_FUNC_INFO << '\n' << QByteArray(k, size); - return true; -} - static inline QString qClassName(const QString &qtNamespace, const char *className) { if (qtNamespace.isEmpty()) |