diff options
Diffstat (limited to 'src/qml/compiler/qv4compileddata.cpp')
-rw-r--r-- | src/qml/compiler/qv4compileddata.cpp | 55 |
1 files changed, 21 insertions, 34 deletions
diff --git a/src/qml/compiler/qv4compileddata.cpp b/src/qml/compiler/qv4compileddata.cpp index d889e634c0..cc11b250f3 100644 --- a/src/qml/compiler/qv4compileddata.cpp +++ b/src/qml/compiler/qv4compileddata.cpp @@ -65,6 +65,9 @@ #include <QCryptographicHash> #include <QSaveFile> +// generated by qmake: +#include "qml_compile_hash_p.h" + #include <algorithm> #if defined(QT_BUILD_INTERNAL) @@ -84,8 +87,10 @@ static QString cacheFilePath(const QUrl &url) { const QString localSourcePath = QQmlFile::urlToLocalFileOrQrc(url); const QString localCachePath = localSourcePath + QLatin1Char('c'); +#ifndef Q_OS_ANDROID if (QFile::exists(localCachePath) || QFileInfo(QFileInfo(localSourcePath).dir().absolutePath()).isWritable()) return localCachePath; +#endif QCryptographicHash fileNameHash(QCryptographicHash::Sha1); fileNameHash.addData(localSourcePath.toUtf8()); QString directory = QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QLatin1String("/qmlcache/"); @@ -94,7 +99,8 @@ static QString cacheFilePath(const QUrl &url) } #endif -CompilationUnit::CompilationUnit() +CompilationUnit::CompilationUnit(const Unit *unitData) + : data(unitData) {} #ifndef V4_BOOTSTRAP @@ -103,7 +109,7 @@ CompilationUnit::~CompilationUnit() unlink(); if (data && !(data->flags & QV4::CompiledData::Unit::StaticData)) free(const_cast<Unit *>(data)); - data = 0; + data = nullptr; } QV4::Function *CompilationUnit::linkToEngine(ExecutionEngine *engine) @@ -195,7 +201,7 @@ QV4::Function *CompilationUnit::linkToEngine(ExecutionEngine *engine) if (data->indexOfRootFunction != -1) return runtimeFunctions[data->indexOfRootFunction]; else - return 0; + return nullptr; } void CompilationUnit::unlink() @@ -222,16 +228,16 @@ void CompilationUnit::unlink() qDeleteAll(resolvedTypes); resolvedTypes.clear(); - engine = 0; - qmlEngine = 0; + engine = nullptr; + qmlEngine = nullptr; free(runtimeStrings); - runtimeStrings = 0; + runtimeStrings = nullptr; delete [] runtimeLookups; - runtimeLookups = 0; + runtimeLookups = nullptr; delete [] runtimeRegularExpressions; - runtimeRegularExpressions = 0; + runtimeRegularExpressions = nullptr; free(runtimeClasses); - runtimeClasses = 0; + runtimeClasses = nullptr; qDeleteAll(runtimeFunctions); runtimeFunctions.clear(); #if Q_BYTE_ORDER == Q_BIG_ENDIAN @@ -251,11 +257,11 @@ void CompilationUnit::markObjects(QV4::MarkStack *markStack) } } -IdentifierHash<int> CompilationUnit::namedObjectsPerComponent(int componentObjectIndex) +IdentifierHash CompilationUnit::namedObjectsPerComponent(int componentObjectIndex) { auto it = namedObjectsPerComponentCache.find(componentObjectIndex); if (it == namedObjectsPerComponentCache.end()) { - IdentifierHash<int> namedObjectCache(engine); + IdentifierHash namedObjectCache(engine); const CompiledData::Object *component = data->objectAt(componentObjectIndex); const quint32_le *namedObjectIndexPtr = component->namedObjectsInComponentTable(); for (quint32 i = 0; i < component->nNamedObjectsInComponent; ++i, ++namedObjectIndexPtr) { @@ -354,24 +360,6 @@ bool CompilationUnit::loadFromDisk(const QUrl &url, const QDateTime &sourceTimeS return false; } - { - const QString foundArchitecture = stringAt(data->architectureIndex); - const QString expectedArchitecture = QSysInfo::buildAbi(); - if (foundArchitecture != expectedArchitecture) { - *errorString = QString::fromUtf8("Architecture mismatch. Found %1 expected %2").arg(foundArchitecture).arg(expectedArchitecture); - return false; - } - } - - { - const QString foundCodeGenerator = stringAt(data->codeGeneratorIndex); - const QString expectedCodeGenerator = QStringLiteral("moth"); // ### - if (foundCodeGenerator != expectedCodeGenerator) { - *errorString = QString::fromUtf8("Code generator mismatch. Found code generated by %1 but expected %2").arg(foundCodeGenerator).arg(expectedCodeGenerator); - return false; - } - } - dataPtrChange.commit(); free(const_cast<Unit*>(oldDataPtr)); backingFile.reset(cacheFile.take()); @@ -465,6 +453,7 @@ Unit *CompilationUnit::createUnitData(QmlIR::Document *irDocument) if (jsUnit->sourceFileIndex == quint32(0) || jsUnit->stringAt(jsUnit->sourceFileIndex) != irDocument->jsModule.fileName) { ensureWritableUnit(); jsUnit->sourceFileIndex = stringTable.registerString(irDocument->jsModule.fileName); + jsUnit->finalUrlIndex = stringTable.registerString(irDocument->jsModule.finalUrl); } // Collect signals that have had a change in signature (from onClicked to onClicked(mouse) for example) @@ -687,7 +676,7 @@ bool qtTypeInherits(const QMetaObject *mo) { void ResolvedTypeReference::doDynamicTypeCheck() { - const QMetaObject *mo = 0; + const QMetaObject *mo = nullptr; if (typePropertyCache) mo = typePropertyCache->firstCppMetaObject(); else if (type.isValid()) @@ -709,7 +698,7 @@ static QByteArray ownLibraryChecksum() // the cache files may end up being re-used. To avoid that we also add the checksum of // the QtQml library. Dl_info libInfo; - if (dladdr(reinterpret_cast<const void *>(&ownLibraryChecksum), &libInfo) != 0) { + if (dladdr(reinterpret_cast<void *>(&ownLibraryChecksum), &libInfo) != 0) { QFile library(QFile::decodeName(libInfo.dli_fname)); if (library.open(QIODevice::ReadOnly)) { QCryptographicHash hash(QCryptographicHash::Md5); @@ -717,10 +706,8 @@ static QByteArray ownLibraryChecksum() libraryChecksum = hash.result(); } } -#elif defined(QML_COMPILE_HASH) - libraryChecksum = QByteArray(QT_STRINGIFY(QML_COMPILE_HASH)); #else - // Not implemented. + libraryChecksum = QByteArray(QML_COMPILE_HASH); #endif return libraryChecksum; } |