diff options
author | Simon Hausmann <simon.hausmann@qt.io> | 2016-12-29 10:20:53 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2017-01-28 19:05:03 +0000 |
commit | 4dfe1bc5ad1bf213f8acbece3777e1662a207c3a (patch) | |
tree | 1a878cf3842a258cd4b2c2f8563d919d56a4d868 /src/qml/compiler/qv4isel_moth.cpp | |
parent | e6e5fd282d67c5b03536e0e97b3e690a176445f4 (diff) |
Include the interpreter codegen and QML cache saving code in qmldevtools
Change-Id: Ic3f1476b87bfa7ab0c280c928e9ac97f92698336
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/qml/compiler/qv4isel_moth.cpp')
-rw-r--r-- | src/qml/compiler/qv4isel_moth.cpp | 64 |
1 files changed, 34 insertions, 30 deletions
diff --git a/src/qml/compiler/qv4isel_moth.cpp b/src/qml/compiler/qv4isel_moth.cpp index 9dbebd1128..d10e34c83b 100644 --- a/src/qml/compiler/qv4isel_moth.cpp +++ b/src/qml/compiler/qv4isel_moth.cpp @@ -39,15 +39,15 @@ #include "qv4isel_util_p.h" #include "qv4isel_moth_p.h" -#include "qv4vme_moth_p.h" #include "qv4ssa_p.h" -#include <private/qv4debugging_p.h> -#include <private/qv4function_p.h> -#include <private/qv4regexpobject_p.h> #include <private/qv4compileddata_p.h> -#include <private/qqmlengine_p.h> #include <wtf/MathExtras.h> +#if !defined(V4_BOOTSTRAP) +#include "qv4vme_moth_p.h" +#include <private/qv4function_p.h> +#endif + #undef USE_TYPE_INFO using namespace QV4; @@ -1425,6 +1425,8 @@ CompilationUnit::~CompilationUnit() { } +#if !defined(V4_BOOTSTRAP) + void CompilationUnit::linkBackendToEngine(QV4::ExecutionEngine *engine) { #ifdef MOTH_THREADED_INTERPRETER @@ -1461,6 +1463,31 @@ void CompilationUnit::linkBackendToEngine(QV4::ExecutionEngine *engine) } } +bool CompilationUnit::memoryMapCode(QString *errorString) +{ + Q_UNUSED(errorString); + codeRefs.resize(data->functionTableSize); + + const char *basePtr = reinterpret_cast<const char *>(data); + + for (uint i = 0; i < data->functionTableSize; ++i) { + const CompiledData::Function *compiledFunction = data->functionAt(i); + const char *codePtr = const_cast<const char *>(reinterpret_cast<const char *>(basePtr + compiledFunction->codeOffset)); +#ifdef MOTH_THREADED_INTERPRETER + // for the threaded interpreter we need to make a copy of the data because it needs to be + // modified for the instruction handler addresses. + QByteArray code(codePtr, compiledFunction->codeSize); +#else + QByteArray code = QByteArray::fromRawData(codePtr, compiledFunction->codeSize); +#endif + codeRefs[i] = code; + } + + return true; +} + +#endif // V4_BOOTSTRAP + void CompilationUnit::prepareCodeOffsetsForDiskStorage(CompiledData::Unit *unit) { const int codeAlignment = 16; @@ -1482,7 +1509,7 @@ bool CompilationUnit::saveCodeToDisk(QIODevice *device, const CompiledData::Unit QByteArray padding; -#ifdef MOTH_THREADED_INTERPRETER +#if defined(MOTH_THREADED_INTERPRETER) && !defined(V4_BOOTSTRAP) // Map from instruction label back to instruction type. Only needed when persisting // already linked compilation units; QHash<void*, int> reverseInstructionMapping; @@ -1511,7 +1538,7 @@ bool CompilationUnit::saveCodeToDisk(QIODevice *device, const CompiledData::Unit QByteArray code = codeRefs.at(i); -#ifdef MOTH_THREADED_INTERPRETER +#if defined(MOTH_THREADED_INTERPRETER) && !defined(V4_BOOTSTRAP) if (!reverseInstructionMapping.isEmpty()) { char *codePtr = code.data(); // detaches int index = 0; @@ -1541,29 +1568,6 @@ bool CompilationUnit::saveCodeToDisk(QIODevice *device, const CompiledData::Unit return true; } -bool CompilationUnit::memoryMapCode(QString *errorString) -{ - Q_UNUSED(errorString); - codeRefs.resize(data->functionTableSize); - - const char *basePtr = reinterpret_cast<const char *>(data); - - for (uint i = 0; i < data->functionTableSize; ++i) { - const CompiledData::Function *compiledFunction = data->functionAt(i); - const char *codePtr = const_cast<const char *>(reinterpret_cast<const char *>(basePtr + compiledFunction->codeOffset)); -#ifdef MOTH_THREADED_INTERPRETER - // for the threaded interpreter we need to make a copy of the data because it needs to be - // modified for the instruction handler addresses. - QByteArray code(codePtr, compiledFunction->codeSize); -#else - QByteArray code = QByteArray::fromRawData(codePtr, compiledFunction->codeSize); -#endif - codeRefs[i] = code; - } - - return true; -} - QQmlRefPointer<CompiledData::CompilationUnit> ISelFactory::createUnitForLoading() { QQmlRefPointer<CompiledData::CompilationUnit> result; |