aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/qmltooling/qmldbg_debugger/qv4datacollector.cpp14
-rw-r--r--src/plugins/qmltooling/qmldbg_debugger/qv4debugger.cpp5
-rw-r--r--src/plugins/qmltooling/qmldbg_debugger/qv4debuggeragent.cpp2
-rw-r--r--src/plugins/qmltooling/qmldbg_nativedebugger/qqmlnativedebugservice.cpp13
-rw-r--r--src/qml/common/qqmltranslation.cpp2
-rw-r--r--src/qml/common/qqmltranslation_p.h4
-rw-r--r--src/qml/common/qv4compileddata_p.h4
-rw-r--r--src/qml/jsruntime/qv4engine.cpp4
-rw-r--r--src/qml/jsruntime/qv4engine_p.h17
-rw-r--r--src/qml/jsruntime/qv4function_p.h2
-rw-r--r--src/qml/jsruntime/qv4regexp.cpp67
-rw-r--r--src/qml/jsruntime/qv4regexp_p.h37
-rw-r--r--src/qml/jsruntime/qv4regexpobject.cpp8
-rw-r--r--src/qml/qml/qqmlobjectcreator.cpp44
-rw-r--r--src/qml/qml/qqmlvaluetype_p.h4
-rw-r--r--src/qml/qml/qqmlvmemetaobject.cpp5
-rw-r--r--src/qmlcompiler/qqmljsbasicblocks.cpp5
-rw-r--r--tests/auto/qml/qqmlvaluetypeproviders/tst_qqmlvaluetypeproviders.cpp22
-rw-r--r--tools/qmlls/qmllanguageservertool.cpp21
19 files changed, 149 insertions, 131 deletions
diff --git a/src/plugins/qmltooling/qmldbg_debugger/qv4datacollector.cpp b/src/plugins/qmltooling/qmldbg_debugger/qv4datacollector.cpp
index 90edf86acb..382fc3bf90 100644
--- a/src/plugins/qmltooling/qmldbg_debugger/qv4datacollector.cpp
+++ b/src/plugins/qmltooling/qmldbg_debugger/qv4datacollector.cpp
@@ -5,15 +5,15 @@
#include "qv4debugger.h"
#include "qv4debugjob.h"
-#include <private/qv4script_p.h>
-#include <private/qv4string_p.h>
-#include <private/qv4objectiterator_p.h>
-#include <private/qv4identifierhash_p.h>
-#include <private/qv4runtime_p.h>
-#include <private/qv4identifiertable_p.h>
-
#include <private/qqmlcontext_p.h>
#include <private/qqmlengine_p.h>
+#include <private/qv4identifierhash_p.h>
+#include <private/qv4identifiertable_p.h>
+#include <private/qv4objectiterator_p.h>
+#include <private/qv4runtime_p.h>
+#include <private/qv4script_p.h>
+#include <private/qv4stackframe_p.h>
+#include <private/qv4string_p.h>
#include <QtCore/qjsonarray.h>
#include <QtCore/qjsonobject.h>
diff --git a/src/plugins/qmltooling/qmldbg_debugger/qv4debugger.cpp b/src/plugins/qmltooling/qmldbg_debugger/qv4debugger.cpp
index a407153401..69eef41261 100644
--- a/src/plugins/qmltooling/qmldbg_debugger/qv4debugger.cpp
+++ b/src/plugins/qmltooling/qmldbg_debugger/qv4debugger.cpp
@@ -5,10 +5,11 @@
#include "qv4debugjob.h"
#include "qv4datacollector.h"
-#include <private/qv4scopedvalue_p.h>
-#include <private/qv4script_p.h>
#include <private/qqmlcontext_p.h>
#include <private/qqmlengine_p.h>
+#include <private/qv4scopedvalue_p.h>
+#include <private/qv4script_p.h>
+#include <private/qv4stackframe_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/qmltooling/qmldbg_debugger/qv4debuggeragent.cpp b/src/plugins/qmltooling/qmldbg_debugger/qv4debuggeragent.cpp
index 11e1a49512..e512567f3e 100644
--- a/src/plugins/qmltooling/qmldbg_debugger/qv4debuggeragent.cpp
+++ b/src/plugins/qmltooling/qmldbg_debugger/qv4debuggeragent.cpp
@@ -5,6 +5,8 @@
#include "qv4debugservice.h"
#include "qv4datacollector.h"
+#include <private/qv4stackframe_p.h>
+
#include <QtCore/qjsonobject.h>
#include <QtCore/qjsonarray.h>
diff --git a/src/plugins/qmltooling/qmldbg_nativedebugger/qqmlnativedebugservice.cpp b/src/plugins/qmltooling/qmldbg_nativedebugger/qqmlnativedebugservice.cpp
index 84cd1236d9..ae68f7d980 100644
--- a/src/plugins/qmltooling/qmldbg_nativedebugger/qqmlnativedebugservice.cpp
+++ b/src/plugins/qmltooling/qmldbg_nativedebugger/qqmlnativedebugservice.cpp
@@ -4,17 +4,18 @@
#include "qqmlnativedebugservice.h"
#include <private/qqmldebugconnector_p.h>
+#include <private/qqmldebugserviceinterfaces_p.h>
#include <private/qv4debugging_p.h>
-#include <private/qv4engine_p.h>
#include <private/qv4debugging_p.h>
-#include <private/qv4script_p.h>
-#include <private/qv4string_p.h>
-#include <private/qv4objectiterator_p.h>
+#include <private/qv4engine_p.h>
#include <private/qv4identifierhash_p.h>
+#include <private/qv4identifiertable_p.h>
+#include <private/qv4objectiterator_p.h>
#include <private/qv4runtime_p.h>
+#include <private/qv4script_p.h>
+#include <private/qv4stackframe_p.h>
+#include <private/qv4string_p.h>
#include <private/qversionedpacket_p.h>
-#include <private/qqmldebugserviceinterfaces_p.h>
-#include <private/qv4identifiertable_p.h>
#include <QtQml/qjsengine.h>
#include <QtCore/qjsonarray.h>
diff --git a/src/qml/common/qqmltranslation.cpp b/src/qml/common/qqmltranslation.cpp
index 7120071b1a..80a088b228 100644
--- a/src/qml/common/qqmltranslation.cpp
+++ b/src/qml/common/qqmltranslation.cpp
@@ -3,6 +3,8 @@
#include "private/qqmltranslation_p.h"
+#include <QtCore/qcoreapplication.h>
+
QQmlTranslation::QQmlTranslation(const Data &d) : data(d) { }
QQmlTranslation::QQmlTranslation() : data(nullptr) { }
diff --git a/src/qml/common/qqmltranslation_p.h b/src/qml/common/qqmltranslation_p.h
index 9849203abe..7f5bb87531 100644
--- a/src/qml/common/qqmltranslation_p.h
+++ b/src/qml/common/qqmltranslation_p.h
@@ -15,9 +15,9 @@
// We mean it.
//
-#include <QtCore/qstring.h>
+#include <private/qtqmlglobal_p.h>
-#include <private/qv4qmlcontext_p.h>
+#include <QtCore/qstring.h>
QT_BEGIN_NAMESPACE
diff --git a/src/qml/common/qv4compileddata_p.h b/src/qml/common/qv4compileddata_p.h
index 18d2a4c114..95aaf01707 100644
--- a/src/qml/common/qv4compileddata_p.h
+++ b/src/qml/common/qv4compileddata_p.h
@@ -156,7 +156,7 @@ static_assert(sizeof(Location) == 4, "Location structure needs to have the expec
struct RegExp
{
- enum Flags : unsigned int {
+ enum Flag : quint8 {
RegExp_NoFlags = 0x0,
RegExp_Global = 0x01,
RegExp_IgnoreCase = 0x02,
@@ -165,6 +165,8 @@ struct RegExp
RegExp_Unicode = 0x10,
};
+ Q_DECLARE_FLAGS(Flags, Flag);
+
RegExp() : m_data(QSpecialIntegerBitfieldZero) {}
RegExp(quint32 flags, quint32 stringIndex) : RegExp()
{
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp
index f3f2a35336..0f896210cc 100644
--- a/src/qml/jsruntime/qv4engine.cpp
+++ b/src/qml/jsruntime/qv4engine.cpp
@@ -3,6 +3,10 @@
#include "qv4engine_p.h"
+#include <wtf/BumpPointerAllocator.h>
+#include <wtf/OSAllocator.h>
+#include <wtf/PageAllocation.h>
+
#include <private/qjsvalue_p.h>
#include <private/qqmlbuiltinfunctions_p.h>
#include <private/qqmlengine_p.h>
diff --git a/src/qml/jsruntime/qv4engine_p.h b/src/qml/jsruntime/qv4engine_p.h
index 9a0f56fd26..671e0f5a42 100644
--- a/src/qml/jsruntime/qv4engine_p.h
+++ b/src/qml/jsruntime/qv4engine_p.h
@@ -21,7 +21,6 @@
#include <private/qv4context_p.h>
#include <private/qv4enginebase_p.h>
#include <private/qv4executablecompilationunit_p.h>
-#include <private/qv4function_p.h>
#include <private/qv4global_p.h>
#include <private/qv4stacklimits_p.h>
@@ -696,19 +695,15 @@ public:
bool checkStackLimits();
int safeForAllocLength(qint64 len64);
- bool canJIT(Function *f = nullptr)
+ template<typename Jittable>
+ bool canJIT(Jittable *jittable) const
{
#if QT_CONFIG(qml_jit)
- if (!m_canAllocateExecutableMemory)
- return false;
- if (f) {
- return f->kind != Function::AotCompiled
- && !f->isGenerator()
- && f->interpreterCallCount >= s_jitCallCountThreshold;
- }
- return true;
+ return m_canAllocateExecutableMemory
+ && jittable->isJittable()
+ && jittable->interpreterCallCount >= s_jitCallCountThreshold;
#else
- Q_UNUSED(f);
+ Q_UNUSED(jittable);
return false;
#endif
}
diff --git a/src/qml/jsruntime/qv4function_p.h b/src/qml/jsruntime/qv4function_p.h
index 7543dd3c4b..8161c17406 100644
--- a/src/qml/jsruntime/qv4function_p.h
+++ b/src/qml/jsruntime/qv4function_p.h
@@ -132,6 +132,8 @@ public:
return nullptr;
return executableCompilationUnit()->runtimeFunctions[compiledFunction->nestedFunctionIndex];
}
+
+ bool isJittable() const { return kind != Function::AotCompiled && !isGenerator(); }
};
}
diff --git a/src/qml/jsruntime/qv4regexp.cpp b/src/qml/jsruntime/qv4regexp.cpp
index 9c48199157..8dd14d3a43 100644
--- a/src/qml/jsruntime/qv4regexp.cpp
+++ b/src/qml/jsruntime/qv4regexp.cpp
@@ -10,10 +10,11 @@
using namespace QV4;
#if ENABLE(YARR_JIT)
-static constexpr quint8 RegexpJitThreshold = 5;
+static constexpr qsizetype LongStringJitThreshold = 1024;
+static constexpr int LongStringJitBoost = 3;
#endif
-static JSC::RegExpFlags jscFlags(uint flags)
+static JSC::RegExpFlags jscFlags(quint8 flags)
{
JSC::RegExpFlags jscFlags = JSC::NoFlags;
if (flags & CompiledData::RegExp::RegExp_Global)
@@ -71,22 +72,33 @@ uint RegExp::match(const QString &string, int start, uint *matchOffsets)
regexp->byteCode = nullptr;
};
- if (!priv->jitCode && !priv->jitFailed && priv->internalClass->engine->canJIT()
- && (string.length() > 1024 || priv->matchCount++ == RegexpJitThreshold)) {
- removeByteCode(priv);
+ if (!priv->jitCode) {
- JSC::Yarr::ErrorCode error = JSC::Yarr::ErrorCode::NoError;
- JSC::Yarr::YarrPattern yarrPattern(
- WTF::String(*priv->pattern), jscFlags(priv->flags), error);
- if (!yarrPattern.m_containsBackreferences) {
- priv->jitCode = new JSC::Yarr::YarrCodeBlock;
- JSC::VM *vm = static_cast<JSC::VM *>(priv->internalClass->engine);
- JSC::Yarr::jitCompile(yarrPattern, JSC::Yarr::Char16, vm, *priv->jitCode);
- }
+ // Long strings count as more calls. We want the JIT to run earlier.
+ const bool longString = string.length() > LongStringJitThreshold;
+ if (longString)
+ priv->interpreterCallCount += LongStringJitBoost;
+
+ if (priv->internalClass->engine->canJIT(priv)) {
+ removeByteCode(priv);
+
+ JSC::Yarr::ErrorCode error = JSC::Yarr::ErrorCode::NoError;
+ JSC::Yarr::YarrPattern yarrPattern(
+ WTF::String(*priv->pattern), jscFlags(priv->flags), error);
+ if (!yarrPattern.m_containsBackreferences) {
+ priv->jitCode = new JSC::Yarr::YarrCodeBlock;
+ JSC::VM *vm = static_cast<JSC::VM *>(priv->internalClass->engine);
+ JSC::Yarr::jitCompile(yarrPattern, JSC::Yarr::Char16, vm, *priv->jitCode);
+ }
- if (!priv->hasValidJITCode()) {
- removeJitCode(priv);
- regenerateByteCode(priv);
+ if (!priv->hasValidJITCode()) {
+ removeJitCode(priv);
+ regenerateByteCode(priv);
+ }
+ } else if (!longString) {
+ // Short strings do the regular post-increment to honor
+ // QV4_JIT_CALL_THRESHOLD.
+ ++priv->interpreterCallCount;
}
}
#endif
@@ -172,23 +184,8 @@ QString RegExp::getSubstitution(const QString &matched, const QString &str, int
return result;
}
-QString Heap::RegExp::flagsAsString() const
-{
- QString result;
- if (flags & CompiledData::RegExp::RegExp_Global)
- result += QLatin1Char('g');
- if (flags & CompiledData::RegExp::RegExp_IgnoreCase)
- result += QLatin1Char('i');
- if (flags & CompiledData::RegExp::RegExp_Multiline)
- result += QLatin1Char('m');
- if (flags & CompiledData::RegExp::RegExp_Unicode)
- result += QLatin1Char('u');
- if (flags & CompiledData::RegExp::RegExp_Sticky)
- result += QLatin1Char('y');
- return result;
-}
-
-Heap::RegExp *RegExp::create(ExecutionEngine* engine, const QString& pattern, uint flags)
+Heap::RegExp *RegExp::create(
+ ExecutionEngine *engine, const QString &pattern, CompiledData::RegExp::Flags flags)
{
RegExpCacheKey key(pattern, flags);
@@ -215,10 +212,6 @@ void Heap::RegExp::init(ExecutionEngine *engine, const QString &pattern, uint fl
this->pattern = new QString(pattern);
this->flags = flags;
- valid = false;
- jitFailed = false;
- matchCount = 0;
-
JSC::Yarr::ErrorCode error = JSC::Yarr::ErrorCode::NoError;
JSC::Yarr::YarrPattern yarrPattern(WTF::String(pattern), jscFlags(flags), error);
if (error != JSC::Yarr::ErrorCode::NoError)
diff --git a/src/qml/jsruntime/qv4regexp_p.h b/src/qml/jsruntime/qv4regexp_p.h
index 8a178dd2f6..89f9515917 100644
--- a/src/qml/jsruntime/qv4regexp_p.h
+++ b/src/qml/jsruntime/qv4regexp_p.h
@@ -14,21 +14,18 @@
// We mean it.
//
-#include <QString>
-#include <QVector>
-
-#include <wtf/RefPtr.h>
-#include <wtf/FastAllocBase.h>
-#include <wtf/BumpPointerAllocator.h>
-
-#include <limits.h>
+// Yarr.h is not self-contained. Make sure it sees uint8_t
+#include <cstdint>
#include <yarr/Yarr.h>
#include <yarr/YarrInterpreter.h>
#include <yarr/YarrJIT.h>
-#include "qv4managed_p.h"
-#include "qv4engine_p.h"
+#include <private/qv4compileddata_p.h>
+#include <private/qv4managed_p.h>
+
+#include <QtCore/qstring.h>
+#include <QtCore/qvector.h>
QT_BEGIN_NAMESPACE
@@ -64,12 +61,16 @@ struct RegExp : Base {
RegExpCache *cache;
int subPatternCount;
- uint flags;
- bool valid;
+
+#if ENABLE(YARR_JIT)
+ bool isJittable() const { return !jitFailed; }
+ int interpreterCallCount;
bool jitFailed;
- quint8 matchCount;
+#endif
+
+ quint8 flags;
+ bool valid;
- QString flagsAsString() const;
int captureCount() const { return subPatternCount + 1; }
};
Q_STATIC_ASSERT(std::is_trivial_v<RegExp>);
@@ -96,7 +97,9 @@ struct RegExp : public Managed
bool unicode() const { return d()->unicode(); }
bool sticky() const { return d()->sticky(); }
- static Heap::RegExp *create(ExecutionEngine* engine, const QString& pattern, uint flags = CompiledData::RegExp::RegExp_NoFlags);
+ static Heap::RegExp *create(
+ ExecutionEngine *engine, const QString &pattern,
+ CompiledData::RegExp::Flags flags = CompiledData::RegExp::RegExp_NoFlags);
bool isValid() const { return d()->valid; }
@@ -122,7 +125,7 @@ struct RegExpCacheKey
{ return !operator==(other); }
QString pattern;
- uint flags;
+ quint8 flags;
};
inline RegExpCacheKey::RegExpCacheKey(const RegExp::Data *re)
@@ -131,7 +134,7 @@ inline RegExpCacheKey::RegExpCacheKey(const RegExp::Data *re)
{}
inline size_t qHash(const RegExpCacheKey& key, size_t seed = 0) noexcept
-{ return qHash(key.pattern, seed); }
+{ return qHashMulti(seed, key.pattern, key.flags); }
class RegExpCache : public QHash<RegExpCacheKey, WeakValue>
{
diff --git a/src/qml/jsruntime/qv4regexpobject.cpp b/src/qml/jsruntime/qv4regexpobject.cpp
index 144cd39bcd..0f5050c704 100644
--- a/src/qml/jsruntime/qv4regexpobject.cpp
+++ b/src/qml/jsruntime/qv4regexpobject.cpp
@@ -91,7 +91,7 @@ void Heap::RegExpObject::init(const QRegularExpression &re)
Scoped<QV4::RegExpObject> o(scope, this);
QRegularExpression::PatternOptions options = re.patternOptions();
- uint flags = (options & QRegularExpression::CaseInsensitiveOption)
+ CompiledData::RegExp::Flags flags = (options & QRegularExpression::CaseInsensitiveOption)
? CompiledData::RegExp::RegExp_IgnoreCase
: CompiledData::RegExp::RegExp_NoFlags;
if (options & QRegularExpression::MultilineOption)
@@ -222,9 +222,9 @@ static bool isRegExp(ExecutionEngine *e, const QV4::Value *arg)
return re ? true : false;
}
-uint parseFlags(Scope &scope, const QV4::Value *f)
+static CompiledData::RegExp::Flags parseFlags(Scope &scope, const QV4::Value *f)
{
- uint flags = CompiledData::RegExp::RegExp_NoFlags;
+ CompiledData::RegExp::Flags flags = CompiledData::RegExp::RegExp_NoFlags;
if (!f->isUndefined()) {
ScopedString s(scope, f->toString(scope.engine));
if (scope.hasException())
@@ -269,7 +269,7 @@ ReturnedValue RegExpCtor::virtualCallAsConstructor(const FunctionObject *fo, con
ScopedValue f(scope, argc > 1 ? argv[1] : Value::undefinedValue());
Scoped<RegExpObject> re(scope, p);
QString pattern;
- uint flags = CompiledData::RegExp::RegExp_NoFlags;
+ CompiledData::RegExp::Flags flags = CompiledData::RegExp::RegExp_NoFlags;
if (re) {
if (f->isUndefined()) {
diff --git a/src/qml/qml/qqmlobjectcreator.cpp b/src/qml/qml/qqmlobjectcreator.cpp
index 5616d2fd15..d986ed9b39 100644
--- a/src/qml/qml/qqmlobjectcreator.cpp
+++ b/src/qml/qml/qqmlobjectcreator.cpp
@@ -3,36 +3,36 @@
#include "qqmlobjectcreator_p.h"
-#include <private/qqmlengine_p.h>
-#include <private/qqmlvmemetaobject_p.h>
-#include <private/qv4function_p.h>
-#include <private/qv4functionobject_p.h>
-#include <private/qv4qobjectwrapper_p.h>
+#include <private/qjsvalue_p.h>
+#include <private/qqmlanybinding_p.h>
#include <private/qqmlbinding_p.h>
-#include <private/qqmlstringconverters_p.h>
#include <private/qqmlboundsignal_p.h>
-#include <private/qqmlcomponentattached_p.h>
#include <private/qqmlcomponent_p.h>
+#include <private/qqmlcomponentattached_p.h>
#include <private/qqmlcustomparser_p.h>
-#include <private/qqmlscriptstring_p.h>
-#include <private/qqmlpropertyvalueinterceptor_p.h>
-#include <private/qqmlvaluetypeproxybinding_p.h>
#include <private/qqmldebugconnector_p.h>
#include <private/qqmldebugserviceinterfaces_p.h>
+#include <private/qqmlengine_p.h>
+#include <private/qqmlpropertybinding_p.h>
+#include <private/qqmlpropertyvalueinterceptor_p.h>
#include <private/qqmlscriptdata_p.h>
+#include <private/qqmlscriptstring_p.h>
#include <private/qqmlsourcecoordinate_p.h>
-#include <private/qjsvalue_p.h>
+#include <private/qqmlstringconverters_p.h>
+#include <private/qqmlvaluetypeproxybinding_p.h>
+#include <private/qqmlvme_p.h>
+#include <private/qqmlvmemetaobject_p.h>
+#include <private/qv4function_p.h>
+#include <private/qv4functionobject_p.h>
#include <private/qv4generatorobject_p.h>
+#include <private/qv4qobjectwrapper_p.h>
+#include <private/qv4referenceobject_p.h>
#include <private/qv4resolvedtypereference_p.h>
-#include <private/qqmlpropertybinding_p.h>
-#include <private/qqmlanybinding_p.h>
-#include <QtQml/private/qqmlvme_p.h>
-
-#include <QScopedValueRollback>
#include <qtqml_tracepoints_p.h>
-#include <QScopedValueRollback>
-#include <QLoggingCategory>
+
+#include <QtCore/qscopedvaluerollback.h>
+#include <QtCore/qloggingcategory.h>
Q_STATIC_LOGGING_CATEGORY(lcQmlDefaultMethod, "qt.qml.defaultmethod")
@@ -947,8 +947,12 @@ bool QQmlObjectCreator::setPropertyBinding(const QQmlPropertyData *bindingProper
return false;
}
- if (valueType)
- valueType->write(_qobject, bindingProperty->coreIndex(), QQmlPropertyData::BypassInterceptor);
+ if (valueType) {
+ valueType->write(
+ _qobject, bindingProperty->coreIndex(),
+ QQmlPropertyData::BypassInterceptor,
+ QV4::ReferenceObject::AllProperties);
+ }
return true;
}
diff --git a/src/qml/qml/qqmlvaluetype_p.h b/src/qml/qml/qqmlvaluetype_p.h
index 4b5442223d..f6634bacd9 100644
--- a/src/qml/qml/qqmlvaluetype_p.h
+++ b/src/qml/qml/qqmlvaluetype_p.h
@@ -19,7 +19,6 @@
#include <private/qqmlnullablevalue_p.h>
#include <private/qmetatype_p.h>
-#include <private/qv4referenceobject_p.h>
#include <QtCore/qobject.h>
#include <QtCore/qrect.h>
@@ -75,8 +74,7 @@ public:
~QQmlGadgetPtrWrapper();
void read(QObject *obj, int idx);
- void write(QObject *obj, int idx, QQmlPropertyData::WriteFlags flags,
- int internalIndex = QV4::ReferenceObject::AllProperties) const;
+ void write(QObject *obj, int idx, QQmlPropertyData::WriteFlags flags, int internalIndex) const;
QVariant value() const;
void setValue(const QVariant &value);
diff --git a/src/qml/qml/qqmlvmemetaobject.cpp b/src/qml/qml/qqmlvmemetaobject.cpp
index e0a11ac4aa..977733ef91 100644
--- a/src/qml/qml/qqmlvmemetaobject.cpp
+++ b/src/qml/qml/qqmlvmemetaobject.cpp
@@ -372,7 +372,10 @@ bool QQmlInterceptorMetaObject::doIntercept(QMetaObject::Call c, int id, void **
// current value is explicitly set.
// So, we cannot return here if prevComponentValue == newComponentValue.
valueType->writeOnGadget(valueProp, std::move(prevComponentValue));
- valueType->write(object, id, QQmlPropertyData::DontRemoveBinding | QQmlPropertyData::BypassInterceptor);
+ valueType->write(
+ object, id,
+ QQmlPropertyData::DontRemoveBinding | QQmlPropertyData::BypassInterceptor,
+ QV4::ReferenceObject::AllProperties);
vi->write(newComponentValue);
return true;
diff --git a/src/qmlcompiler/qqmljsbasicblocks.cpp b/src/qmlcompiler/qqmljsbasicblocks.cpp
index 2c07dd00b7..9f83715e92 100644
--- a/src/qmlcompiler/qqmljsbasicblocks.cpp
+++ b/src/qmlcompiler/qqmljsbasicblocks.cpp
@@ -2,9 +2,10 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qqmljsbasicblocks_p.h"
-#include "qqmljsutils_p.h"
-#include <QtQml/private/qv4instr_moth_p.h>
+#include <private/qqmlglobal_p.h>
+#include <private/qqmljsutils_p.h>
+#include <private/qv4instr_moth_p.h>
QT_BEGIN_NAMESPACE
diff --git a/tests/auto/qml/qqmlvaluetypeproviders/tst_qqmlvaluetypeproviders.cpp b/tests/auto/qml/qqmlvaluetypeproviders/tst_qqmlvaluetypeproviders.cpp
index bd3e2b50ff..0d45e519a4 100644
--- a/tests/auto/qml/qqmlvaluetypeproviders/tst_qqmlvaluetypeproviders.cpp
+++ b/tests/auto/qml/qqmlvaluetypeproviders/tst_qqmlvaluetypeproviders.cpp
@@ -1,16 +1,22 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-#include <qtest.h>
-#include <QQmlEngine>
-#include <QQmlComponent>
-#include <QQmlContext>
-#include <QDebug>
-#include <QScopedPointer>
+#include "testtypes.h"
+
+#include <private/qmlutils_p.h>
#include <private/qqmlglobal_p.h>
#include <private/qquickvaluetypes_p.h>
-#include <QtQuickTestUtils/private/qmlutils_p.h>
-#include "testtypes.h"
+#include <private/qv4object_p.h>
+#include <private/qv4scopedvalue_p.h>
+
+#include <QtTest/qtest.h>
+
+#include <QtQml/qqmlengine.h>
+#include <QtQml/qqmlcomponent.h>
+#include <QtQml/qqmlcontext.h>
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qscopedpointer.h>
QT_BEGIN_NAMESPACE
extern int qt_defaultDpi(void);
diff --git a/tools/qmlls/qmllanguageservertool.cpp b/tools/qmlls/qmllanguageservertool.cpp
index ad53e75e3e..a0a0a3a234 100644
--- a/tools/qmlls/qmllanguageservertool.cpp
+++ b/tools/qmlls/qmllanguageservertool.cpp
@@ -1,14 +1,22 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-#include <QtQmlLS/private/qqmllanguageserver_p.h>
+#include <private/qhttpmessagestreamparser_p.h>
+#include <private/qqmlglobal_p.h>
+#include <private/qqmljscompiler_p.h>
+#include <private/qqmljsimporter_p.h>
+#include <private/qqmljslogger_p.h>
+#include <private/qqmljsresourcefilemapper_p.h>
+#include <private/qqmljsscope_p.h>
+#include <private/qqmllanguageserver_p.h>
+#include <private/qqmltoolingsettings_p.h>
+#include <private/qqmltoolingutils_p.h>
+
#include <QtCore/qdebug.h>
#include <QtCore/qfile.h>
#include <QtCore/qdir.h>
#include <QtCore/qfileinfo.h>
#include <QtCore/qcoreapplication.h>
-#include <QtQmlToolingSettings/private/qqmltoolingsettings_p.h>
-#include <QtQmlToolingSettings/private/qqmltoolingutils_p.h>
#include <QtCore/qdiriterator.h>
#include <QtCore/qjsonobject.h>
#include <QtCore/qjsonarray.h>
@@ -20,13 +28,6 @@
#include <QtCore/qthreadpool.h>
#include <QtCore/qtimer.h>
-#include <QtJsonRpc/private/qhttpmessagestreamparser_p.h>
-
-#include <QtQmlCompiler/private/qqmljsresourcefilemapper_p.h>
-#include <QtQmlCompiler/private/qqmljscompiler_p.h>
-#include <QtQmlCompiler/private/qqmljslogger_p.h>
-#include <QtQmlCompiler/private/qqmljsscope_p.h>
-#include <QtQmlCompiler/private/qqmljsimporter_p.h>
#if QT_CONFIG(commandlineparser)
# include <QtCore/qcommandlineparser.h>
#endif