diff options
author | Lars Knoll <lars.knoll@digia.com> | 2013-09-16 22:02:27 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-22 01:06:20 +0200 |
commit | e441692b0b8f8fffdfdfa8a21c570adcd5cbae7a (patch) | |
tree | 9b764401d87682012328c46dc947721f47b428b2 /src/qml/qml/qqmllocale.cpp | |
parent | a0f8be4021caa9bb5055923f0eea3bee0e345235 (diff) |
Further work towards an exact GC
Add some more convenience in the helper classes
in qscopedvalue_p.h
Make accesses to CallData safer, and change
ExecutionEngine::newObject() to return a safe
pointer.
Change-Id: I980909754ce9681cf6faa1355bab3a1e5d6dd186
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/qml/qqmllocale.cpp')
-rw-r--r-- | src/qml/qml/qqmllocale.cpp | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/qml/qml/qqmllocale.cpp b/src/qml/qml/qqmllocale.cpp index 405411e65c..d4998ec5ba 100644 --- a/src/qml/qml/qqmllocale.cpp +++ b/src/qml/qml/qqmllocale.cpp @@ -112,7 +112,7 @@ private: DEFINE_MANAGED_VTABLE(QQmlLocaleData); #define GET_LOCALE_DATA_RESOURCE(OBJECT) \ - QQmlLocaleData *r = OBJECT.as<QQmlLocaleData>(); \ + QV4::Scoped<QQmlLocaleData> r(scope, OBJECT.as<QQmlLocaleData>()); \ if (!r) \ V4THROW_ERROR("Not a valid Locale object") @@ -140,6 +140,8 @@ QV4::ReturnedValue QQmlDateExtension::method_toLocaleString(QV4::SimpleCallConte if (ctx->argumentCount > 2) return QV4::DatePrototype::method_toLocaleString(ctx); + QV4::Scope scope(ctx); + QV4::DateObject *date = ctx->thisObject.asDateObject(); if (!date) return QV4::DatePrototype::method_toLocaleString(ctx); @@ -182,6 +184,8 @@ QV4::ReturnedValue QQmlDateExtension::method_toLocaleTimeString(QV4::SimpleCallC if (ctx->argumentCount > 2) return QV4::DatePrototype::method_toLocaleTimeString(ctx); + QV4::Scope scope(ctx); + QV4::DateObject *date = ctx->thisObject.asDateObject(); if (!date) return QV4::DatePrototype::method_toLocaleTimeString(ctx); @@ -225,6 +229,8 @@ QV4::ReturnedValue QQmlDateExtension::method_toLocaleDateString(QV4::SimpleCallC if (ctx->argumentCount > 2) return QV4::DatePrototype::method_toLocaleDateString(ctx); + QV4::Scope scope(ctx); + QV4::DateObject *dateObj = ctx->thisObject.asDateObject(); if (!dateObj) return QV4::DatePrototype::method_toLocaleDateString(ctx); @@ -273,6 +279,8 @@ QV4::ReturnedValue QQmlDateExtension::method_fromLocaleString(QV4::SimpleCallCon return QV4::Encode(engine->newDateObject(dt)); } + QV4::Scope scope(ctx); + if (ctx->argumentCount < 1 || ctx->argumentCount > 3 || !isLocaleObject(ctx->arguments[0])) V4THROW_ERROR("Locale: Date.fromLocaleString(): Invalid arguments"); @@ -315,6 +323,8 @@ QV4::ReturnedValue QQmlDateExtension::method_fromLocaleTimeString(QV4::SimpleCal if (ctx->argumentCount < 1 || ctx->argumentCount > 3 || !isLocaleObject(ctx->arguments[0])) V4THROW_ERROR("Locale: Date.fromLocaleTimeString(): Invalid arguments"); + QV4::Scope scope(ctx); + GET_LOCALE_DATA_RESOURCE(ctx->arguments[0]); QLocale::FormatType enumFormat = QLocale::LongFormat; @@ -355,6 +365,8 @@ QV4::ReturnedValue QQmlDateExtension::method_fromLocaleDateString(QV4::SimpleCal if (ctx->argumentCount < 1 || ctx->argumentCount > 3 || !isLocaleObject(ctx->arguments[0])) V4THROW_ERROR("Locale: Date.fromLocaleDateString(): Invalid arguments"); + QV4::Scope scope(ctx); + GET_LOCALE_DATA_RESOURCE(ctx->arguments[0]); QLocale::FormatType enumFormat = QLocale::LongFormat; @@ -414,6 +426,8 @@ QV4::ReturnedValue QQmlNumberExtension::method_toLocaleString(QV4::SimpleCallCon if (!isLocaleObject(ctx->arguments[0])) return QV4::NumberPrototype::method_toLocaleString(ctx); // Use the default Number toLocaleString() + QV4::Scope scope(ctx); + GET_LOCALE_DATA_RESOURCE(ctx->arguments[0]); quint16 format = 'f'; @@ -450,6 +464,8 @@ QV4::ReturnedValue QQmlNumberExtension::method_toLocaleCurrencyString(QV4::Simpl if (!isLocaleObject(ctx->arguments[0])) V4THROW_ERROR("Locale: Number.toLocaleCurrencyString(): Invalid arguments"); + QV4::Scope scope(ctx); + GET_LOCALE_DATA_RESOURCE(ctx->arguments[0]); QString symbol; @@ -470,6 +486,8 @@ QV4::ReturnedValue QQmlNumberExtension::method_fromLocaleString(QV4::SimpleCallC int numberIdx = 0; QLocale locale; + QV4::Scope scope(ctx); + if (ctx->argumentCount == 2) { if (!isLocaleObject(ctx->arguments[0])) V4THROW_ERROR("Locale: Number.fromLocaleString(): Invalid arguments"); @@ -671,8 +689,8 @@ public: QV8LocaleDataDeletable::QV8LocaleDataDeletable(QV8Engine *engine) { QV4::ExecutionEngine *eng = QV8Engine::getV4(engine); - QV4::Object *o = eng->newObject(); - prototype = QV4::Value::fromObject(o); + QV4::Scope scope(eng); + QV4::Scoped<QV4::Object> o(scope, eng->newObject()); o->defineDefaultProperty(eng, QStringLiteral("dateFormat"), QQmlLocaleData::method_dateFormat, 0); o->defineDefaultProperty(eng, QStringLiteral("standaloneDayName"), QQmlLocaleData::method_standaloneDayName, 0); @@ -699,6 +717,8 @@ QV8LocaleDataDeletable::QV8LocaleDataDeletable(QV8Engine *engine) o->defineAccessorProperty(eng, QStringLiteral("amText"), QQmlLocaleData::method_get_amText, 0); o->defineAccessorProperty(eng, QStringLiteral("measurementSystem"), QQmlLocaleData::method_get_measurementSystem, 0); o->defineAccessorProperty(eng, QStringLiteral("exponential"), QQmlLocaleData::method_get_exponential, 0); + + prototype = o; } QV8LocaleDataDeletable::~QV8LocaleDataDeletable() |