From 78fc64d11c187a796e6b80bd1f35792e202fa9f9 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Tue, 7 May 2013 13:04:12 +0200 Subject: Inject the QML Number extensions directly into the Number proto and ctor Change-Id: Ibb939057cbd1bf5d68972e656ddeae1e58a0d6a4 Reviewed-by: Lars Knoll --- src/qml/qml/qqmllocale.cpp | 37 ++++++------------------------------- src/qml/qml/qqmllocale_p.h | 2 +- src/qml/qml/v8/qv8engine.cpp | 2 +- 3 files changed, 8 insertions(+), 33 deletions(-) (limited to 'src') diff --git a/src/qml/qml/qqmllocale.cpp b/src/qml/qml/qqmllocale.cpp index 0f8c3626c7..3dc7f690d1 100644 --- a/src/qml/qml/qqmllocale.cpp +++ b/src/qml/qml/qqmllocale.cpp @@ -49,6 +49,7 @@ #include #include +#include QT_BEGIN_NAMESPACE @@ -420,37 +421,11 @@ QV4::Value QQmlDateExtension::timeZoneUpdated(const v8::Arguments& args) //----------------- // Number extension -static const char numberToLocaleStringFunction[] = - "(function(toLocaleStringFunc) { " - " var orig_toLocaleString;" - " orig_toLocaleString = Number.prototype.toLocaleString;" - " Number.prototype.toLocaleString = (function() {" - " var val = toLocaleStringFunc.apply(this, arguments);" - " if (val == undefined) val = orig_toLocaleString.call(this);" - " return val;" - " })" - "})"; - -static const char numberToLocaleCurrencyStringFunction[] = - "(function(toLocaleCurrencyStringFunc) { " - " Number.prototype.toLocaleCurrencyString = (function() {" - " return toLocaleCurrencyStringFunc.apply(this, arguments);" - " })" - "})"; - -static const char numberFromLocaleStringFunction[] = - "(function(fromLocaleStringFunc) { " - " Number.fromLocaleString = (function() {" - " return fromLocaleStringFunc.apply(null, arguments);" - " })" - "})"; - - -void QQmlNumberExtension::registerExtension(QV8Engine *engine) +void QQmlNumberExtension::registerExtension(QV4::ExecutionEngine *engine) { - registerFunction(engine, numberToLocaleStringFunction, toLocaleString); - registerFunction(engine, numberToLocaleCurrencyStringFunction, toLocaleCurrencyString); - registerFunction(engine, numberFromLocaleStringFunction, fromLocaleString); + engine->numberPrototype->defineDefaultProperty(engine, QStringLiteral("toLocaleString"), toLocaleString); + engine->numberPrototype->defineDefaultProperty(engine, QStringLiteral("toLocaleCurrencyString"), toLocaleCurrencyString); + engine->numberCtor.objectValue()->defineDefaultProperty(engine, QStringLiteral("fromLocaleString"), fromLocaleString); } QV4::Value QQmlNumberExtension::toLocaleString(QV4::SimpleCallContext *ctx) @@ -467,7 +442,7 @@ QV4::Value QQmlNumberExtension::toLocaleString(QV4::SimpleCallContext *ctx) } if (!isLocaleObject(ctx->arguments[0])) - return QV4::Value::undefinedValue(); // Use the default Number toLocaleString() + return QV4::NumberPrototype::method_toLocaleString(ctx); // Use the default Number toLocaleString() V4_GET_LOCALE_DATA_RESOURCE(ctx->arguments[0]); diff --git a/src/qml/qml/qqmllocale_p.h b/src/qml/qml/qqmllocale_p.h index 67f5f8f1a1..a37bd71865 100644 --- a/src/qml/qml/qqmllocale_p.h +++ b/src/qml/qml/qqmllocale_p.h @@ -71,7 +71,7 @@ private: class QQmlNumberExtension { public: - static void registerExtension(QV8Engine *engine); + static void registerExtension(QV4::ExecutionEngine *engine); private: static QV4::Value toLocaleString(QV4::SimpleCallContext *ctx); diff --git a/src/qml/qml/v8/qv8engine.cpp b/src/qml/qml/v8/qv8engine.cpp index a70b04d5b4..4a6300c256 100644 --- a/src/qml/qml/v8/qv8engine.cpp +++ b/src/qml/qml/v8/qv8engine.cpp @@ -647,7 +647,7 @@ void QV8Engine::initializeGlobal(v8::Handle global) QQmlLocale::registerStringLocaleCompare(this); QQmlDateExtension::registerExtension(this); - QQmlNumberExtension::registerExtension(this); + QQmlNumberExtension::registerExtension(m_v4Engine); qt_add_domexceptions(m_v4Engine); m_xmlHttpRequestData = qt_add_qmlxmlhttprequest(this); -- cgit v1.2.3