From: Jedrzej Nowacki Date: Thu, 4 Aug 2011 13:13:47 +0000 (+0200) Subject: Code cleanup: unify QRegExp conversion. X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=36a225a038b971db1fa81ff82063fa27a0b73bab;p=konrad%2Fqtdeclarative.git Code cleanup: unify QRegExp conversion. Remove duplicated code for QRegExp conversion. Change-Id: Ic0a6b68a317404ac6d1695f0220f257046b4ba80 Reviewed-on: http://codereview.qt.nokia.com/2703 Reviewed-by: Qt Sanity Bot Reviewed-by: Simon Hausmann --- diff --git a/src/declarative/qml/v8/qv8engine.cpp b/src/declarative/qml/v8/qv8engine.cpp index a3dfef1..c8de55d 100644 --- a/src/declarative/qml/v8/qv8engine.cpp +++ b/src/declarative/qml/v8/qv8engine.cpp @@ -276,55 +276,6 @@ static v8::Handle 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 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(flags)); -} - v8::Handle QV8Engine::fromVariant(const QVariant &variant) { int type = variant.userType(); @@ -367,7 +318,7 @@ v8::Handle QV8Engine::fromVariant(const QVariant &variant) case QMetaType::QTime: return v8::Date::New(qtDateTimeToJsDate(QDateTime(QDate(1970,1,1), *reinterpret_cast(ptr)))); case QMetaType::QRegExp: - return regexpFromQRegExp(this, *reinterpret_cast(ptr)); + return QJSConverter::toRegExp(*reinterpret_cast(ptr)); case QMetaType::QObjectStar: case QMetaType::QWidgetStar: return newQObject(*reinterpret_cast(ptr));