From c76ff8526929091e20c89a4ad8af7f89237fadba Mon Sep 17 00:00:00 2001 From: Ivan Komissarov Date: Sat, 19 Dec 2020 15:00:26 +0100 Subject: Fix QRegExp usages Change-Id: Ibebe73c32ceacf5964455918e3e0a2c641b8096e Reviewed-by: Christian Kandeler --- src/script/api/qscriptengine.cpp | 29 ++++++++++++++++------------- src/script/api/qscriptengine_p.h | 8 +++++++- src/script/bridge/qscriptqobject.cpp | 7 ++----- 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp index 7265254..1a81a7e 100644 --- a/src/script/api/qscriptengine.cpp +++ b/src/script/api/qscriptengine.cpp @@ -3149,11 +3149,6 @@ JSC::JSValue QScriptEnginePrivate::create(JSC::ExecState *exec, int type, const case QMetaType::QDate: result = newDate(exec, QDateTime(*reinterpret_cast(ptr))); break; -#ifndef QT_NO_REGEXP - case QMetaType::QRegExp: - result = newRegExp(exec, *reinterpret_cast(ptr)); - break; -#endif #ifndef QT_NO_QOBJECT case QMetaType::QObjectStar: result = eng->newQObject(*reinterpret_cast(ptr)); @@ -3163,6 +3158,12 @@ JSC::JSValue QScriptEnginePrivate::create(JSC::ExecState *exec, int type, const result = eng->newVariant(*reinterpret_cast(ptr)); break; default: +#ifndef QT_NO_REGEXP + if (type == qMetaTypeId()) { + result = newRegExp(exec, *reinterpret_cast(ptr)); + break; + } +#endif if (QMetaType::typeFlags(type) & QMetaType::PointerToQObject) { result = eng->newQObject(*reinterpret_cast(ptr)); break; @@ -3279,13 +3280,6 @@ bool QScriptEnginePrivate::convertValue(JSC::ExecState *exec, JSC::JSValue value *reinterpret_cast(ptr) = toDateTime(exec, value).date(); return true; } break; -#ifndef QT_NO_REGEXP - case QMetaType::QRegExp: - if (isRegExp(value)) { - *reinterpret_cast(ptr) = toRegExp(exec, value); - return true; - } break; -#endif #ifndef QT_NO_QOBJECT case QMetaType::QObjectStar: if (isQObject(value) || value.isNull()) { @@ -3312,7 +3306,16 @@ bool QScriptEnginePrivate::convertValue(JSC::ExecState *exec, JSC::JSValue value *reinterpret_cast(ptr) = toVariant(exec, value); return true; default: - ; +#ifndef QT_NO_REGEXP + if (type == qMetaTypeId()) { + if (isRegExp(value)) { + *reinterpret_cast(ptr) = toRegExp(exec, value); + return true; + } + break; + } +#endif + break; } QByteArray name = QMetaType::typeName(type); diff --git a/src/script/api/qscriptengine_p.h b/src/script/api/qscriptengine_p.h index 73387e5..a793583 100644 --- a/src/script/api/qscriptengine_p.h +++ b/src/script/api/qscriptengine_p.h @@ -56,9 +56,15 @@ #include #include #include -#include #include #include + +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) +#include +#else +#include +#endif + #include "qscriptvalue_p.h" #include "qscriptstring_p.h" #include "bridge/qscriptclassobject_p.h" diff --git a/src/script/bridge/qscriptqobject.cpp b/src/script/bridge/qscriptqobject.cpp index 7ed9612..17e4524 100644 --- a/src/script/bridge/qscriptqobject.cpp +++ b/src/script/bridge/qscriptqobject.cpp @@ -702,13 +702,10 @@ static JSC::JSValue delegateQtMethod(JSC::ExecState *exec, QMetaMethod::MethodTy break; } } else if (QScriptEnginePrivate::isRegExp(actual)) { - switch (tid) { - case QMetaType::QRegExp: + if (tid == qMetaTypeId()) { // perfect - break; - default: + } else { matchDistance += 10; - break; } } else if (QScriptEnginePrivate::isVariant(actual)) { if (argType.isVariant() -- cgit v1.2.3