core/scriptmodel: avoid comparing native types as equal by fields

This commit is contained in:
outfoxxed committed 2026-09-15 01:37:42 -07:00
1 parent 86b4275879
commit c6a516096d
1 file changed
+8 -1
+8 -1
View File
@@ -27,7 +27,14 @@ bool qjsValueStructuralEq(
const RecursionPair* activePair = nullptr
) {
if (a.strictlyEquals(b)) return true;
if (!a.isObject() || !b.isObject() || a.isArray() != b.isArray()) return false;
const auto jsValueType = QMetaType::fromType<QJSValue>();
const auto aIsNative = a.toVariant(QJSValue::RetainJSObjects).metaType() != jsValueType;
const auto bIsNative = b.toVariant(QJSValue::RetainJSObjects).metaType() != jsValueType;
if (aIsNative || bIsNative) return false;
if (!a.isObject() || !b.isObject() || a.isCallable() || b.isCallable()) return false;
if (a.isArray() != b.isArray()) return false;
for (const auto* pair = activePair; pair != nullptr; pair = pair->previous) {
if (a.strictlyEquals(*pair->a) || b.strictlyEquals(*pair->b)) return false;