From 4bf3d32f61ef545abed89641893e8e9248b878f1 Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Tue, 14 Jul 2009 11:21:52 +0200 Subject: [PATCH] debugger: assume that not-known-to-be-simple types have children This might lead to false positives in corner cases like empty structures but speed up the display of arrays and lists of user-defined types a lot. --- src/plugins/debugger/watchhandler.cpp | 13 +++++++++++-- src/plugins/debugger/watchutils.cpp | 11 +++++++++++ src/plugins/debugger/watchutils.h | 4 ++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index b6dad71d4ac..953b91b67ca 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -180,8 +180,17 @@ void WatchData::setType(const QString &str) changed = false; } setTypeUnneeded(); - if (isIntOrFloatType(type)) - setHasChildren(false); + switch (guessChildren(type)) { + case HasChildren: + setHasChildren(true); + break; + case HasNoChildren: + setHasChildren(false); + break; + case HasPossiblyChildren: + setHasChildren(true); // FIXME: bold assumption + break; + } } void WatchData::setAddress(const QString &str) diff --git a/src/plugins/debugger/watchutils.cpp b/src/plugins/debugger/watchutils.cpp index 4ca9b22b980..cd6c7e21b32 100644 --- a/src/plugins/debugger/watchutils.cpp +++ b/src/plugins/debugger/watchutils.cpp @@ -337,6 +337,17 @@ bool isIntOrFloatType(const QString &type) return isIntType(type) || types.contains(type); } +GuessChildrenResult guessChildren(const QString &type) +{ + if (isIntOrFloatType(type)) + return HasNoChildren; + if (isPointerType(type)) + return HasChildren; + if (type.endsWith(QLatin1String("QString"))) + return HasNoChildren; + return HasPossiblyChildren; +} + QString sizeofTypeExpression(const QString &type) { if (type.endsWith(QLatin1Char('*'))) diff --git a/src/plugins/debugger/watchutils.h b/src/plugins/debugger/watchutils.h index 9d02ad75f89..4d828bbc156 100644 --- a/src/plugins/debugger/watchutils.h +++ b/src/plugins/debugger/watchutils.h @@ -73,6 +73,10 @@ bool extractTemplate(const QString &type, QString *tmplate, QString *inner); QString extractTypeFromPTypeOutput(const QString &str); bool isIntOrFloatType(const QString &type); bool isIntType(const QString &type); + +enum GuessChildrenResult { HasChildren, HasNoChildren, HasPossiblyChildren }; +GuessChildrenResult guessChildren(const QString &type); + QString sizeofTypeExpression(const QString &type); QString quoteUnprintableLatin1(const QByteArray &ba); -- GitLab