Code cleanup: unify QRegExp conversion.
authorJedrzej Nowacki <jedrzej.nowacki@nokia.com>
Thu, 4 Aug 2011 13:13:47 +0000 (15:13 +0200)
committerQt by Nokia <qt-info@nokia.com>
Wed, 10 Aug 2011 10:49:51 +0000 (12:49 +0200)
Remove duplicated code for QRegExp conversion.

Change-Id: Ic0a6b68a317404ac6d1695f0220f257046b4ba80
Reviewed-on: http://codereview.qt.nokia.com/2703
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Simon Hausmann <simon.hausmann@nokia.com>

src/declarative/qml/v8/qv8engine.cpp

index a3dfef1..c8de55d 100644 (file)
@@ -276,55 +276,6 @@ static v8::Handle<v8::Object> objectFromVariantMap(QV8Engine *engine, const QVar
 
 Q_CORE_EXPORT QString qt_regexp_toCanonical(const QString &, QRegExp::PatternSyntax);
 
-// Converts a QRegExp to a JS RegExp.
-// The conversion is not 100% exact since ECMA regexp and QRegExp
-// have different semantics/flags, but we try to do our best.
-static v8::Handle<v8::RegExp> regexpFromQRegExp(QV8Engine *engine, const QRegExp &re)
-{
-    // Convert the pattern to a ECMAScript pattern.
-    QString pattern = qt_regexp_toCanonical(re.pattern(), re.patternSyntax());
-    if (re.isMinimal()) {
-        QString ecmaPattern;
-        int len = pattern.length();
-        ecmaPattern.reserve(len);
-        int i = 0;
-        const QChar *wc = pattern.unicode();
-        bool inBracket = false;
-        while (i < len) {
-            QChar c = wc[i++];
-            ecmaPattern += c;
-            switch (c.unicode()) {
-            case '?':
-            case '+':
-            case '*':
-            case '}':
-                if (!inBracket)
-                    ecmaPattern += QLatin1Char('?');
-                break;
-            case '\\':
-                if (i < len)
-                    ecmaPattern += wc[i++];
-                break;
-            case '[':
-                inBracket = true;
-                break;
-            case ']':
-                inBracket = false;
-                break;
-            default:
-                break;
-            }
-        }
-        pattern = ecmaPattern;
-    }
-
-    int flags = v8::RegExp::kNone;
-    if (re.caseSensitivity() == Qt::CaseInsensitive)
-        flags |= v8::RegExp::kIgnoreCase;
-
-    return v8::RegExp::New(engine->toString(pattern), static_cast<v8::RegExp::Flags>(flags));
-}
-
 v8::Handle<v8::Value> QV8Engine::fromVariant(const QVariant &variant)
 {
     int type = variant.userType();
@@ -367,7 +318,7 @@ v8::Handle<v8::Value> QV8Engine::fromVariant(const QVariant &variant)
             case QMetaType::QTime:
                 return v8::Date::New(qtDateTimeToJsDate(QDateTime(QDate(1970,1,1), *reinterpret_cast<const QTime *>(ptr))));
             case QMetaType::QRegExp:
-                return regexpFromQRegExp(this, *reinterpret_cast<const QRegExp *>(ptr));
+                return QJSConverter::toRegExp(*reinterpret_cast<const QRegExp *>(ptr));
             case QMetaType::QObjectStar:
             case QMetaType::QWidgetStar:
                 return newQObject(*reinterpret_cast<QObject* const *>(ptr));