diff options
Diffstat (limited to 'src/plugins/qmltooling/qmldbg_debugger/qv4datacollector.h')
-rw-r--r-- | src/plugins/qmltooling/qmldbg_debugger/qv4datacollector.h | 141 |
1 files changed, 35 insertions, 106 deletions
diff --git a/src/plugins/qmltooling/qmldbg_debugger/qv4datacollector.h b/src/plugins/qmltooling/qmldbg_debugger/qv4datacollector.h index acc3a6022e..fd6356f22e 100644 --- a/src/plugins/qmltooling/qmldbg_debugger/qv4datacollector.h +++ b/src/plugins/qmltooling/qmldbg_debugger/qv4datacollector.h @@ -1,31 +1,37 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtQml module of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL21$ +** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** -** As a special exception, The Qt Company gives you certain additional -** rights. These rights are described in The Qt Company LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** @@ -35,40 +41,44 @@ #define QV4DATACOLLECTOR_H #include <private/qv4engine_p.h> -#include <private/qv4debugging_p.h> +#include <private/qv4persistent_p.h> + +#include <QtCore/QJsonObject> +#include <QtCore/QJsonArray> #include <QtCore/QJsonObject> #include <QtCore/QJsonArray> QT_BEGIN_NAMESPACE +class QV4Debugger; class QV4DataCollector { public: typedef uint Ref; typedef QVector<uint> Refs; - static const Ref s_invalidRef; - QV4::CallContext *findContext(int frame); static QV4::Heap::CallContext *findScope(QV4::ExecutionContext *ctxt, int scope); - QVector<QV4::Heap::ExecutionContext::ContextType> getScopeTypes(int frame); static int encodeScopeType(QV4::Heap::ExecutionContext::ContextType scopeType); + QVector<QV4::Heap::ExecutionContext::ContextType> getScopeTypes(int frame); + QV4::CallContext *findContext(int frame); + QV4DataCollector(QV4::ExecutionEngine *engine); - ~QV4DataCollector(); Ref collect(const QV4::ScopedValue &value); - bool isValidRef(Ref ref) const; - QJsonObject lookupRef(Ref ref); - Ref addFunctionRef(const QString &functionName); Ref addScriptRef(const QString &scriptName); + bool isValidRef(Ref ref) const; + QJsonObject lookupRef(Ref ref); + bool collectScope(QJsonObject *dict, int frameNr, int scopeNr); QJsonObject buildFrame(const QV4::StackFrame &stackFrame, int frameNr); QV4::ExecutionEngine *engine() const { return m_engine; } QJsonArray flushCollectedRefs(); + void clear(); private: Ref addRef(QV4::Value value, bool deduplicate = true); @@ -80,91 +90,10 @@ private: void collectArgumentsInContext(); QV4::ExecutionEngine *m_engine; - Refs collectedRefs; - QV4::PersistentValue values; + Refs m_collectedRefs; + QV4::PersistentValue m_values; typedef QHash<Ref, QJsonObject> SpecialRefs; - SpecialRefs specialRefs; -}; - -class CollectJob : public QV4::Debugging::V4Debugger::Job -{ -protected: - QV4DataCollector *collector; - QJsonObject result; - QJsonArray collectedRefs; -public: - CollectJob(QV4DataCollector *collector) : collector(collector) {} - const QJsonObject &returnValue() const { return result; } - const QJsonArray &refs() const { return collectedRefs; } -}; - -class BacktraceJob: public CollectJob -{ - int fromFrame; - int toFrame; -public: - BacktraceJob(QV4DataCollector *collector, int fromFrame, int toFrame); - void run(); -}; - -class FrameJob: public CollectJob -{ - int frameNr; - bool success; - -public: - FrameJob(QV4DataCollector *collector, int frameNr); - void run(); - bool wasSuccessful() const; -}; - -class ScopeJob: public CollectJob -{ - int frameNr; - int scopeNr; - bool success; - -public: - ScopeJob(QV4DataCollector *collector, int frameNr, int scopeNr); - void run(); - bool wasSuccessful() const; -}; - -class ValueLookupJob: public CollectJob -{ - const QJsonArray handles; - QString exception; - -public: - ValueLookupJob(const QJsonArray &handles, QV4DataCollector *collector); - void run(); - const QString &exceptionMessage() const; -}; - -class ExpressionEvalJob: public QV4::Debugging::V4Debugger::JavaScriptJob -{ - QV4DataCollector *collector; - QString exception; - QJsonObject result; - QJsonArray collectedRefs; - -public: - ExpressionEvalJob(QV4::ExecutionEngine *engine, int frameNr, const QString &expression, - QV4DataCollector *collector); - virtual void handleResult(QV4::ScopedValue &value); - const QString &exceptionMessage() const; - const QJsonObject &returnValue() const; - const QJsonArray &refs() const; -}; - -class GatherSourcesJob: public QV4::Debugging::V4Debugger::Job -{ - QV4::ExecutionEngine *engine; - const int seq; - -public: - GatherSourcesJob(QV4::ExecutionEngine *engine, int seq); - void run(); + SpecialRefs m_specialRefs; }; QT_END_NAMESPACE |