diff options
author | Lars Knoll <lars.knoll@digia.com> | 2014-04-05 21:03:37 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2014-07-22 13:48:55 +0200 |
commit | 1b008d6fb89c82d4a31d30cc1abe3128c723a851 (patch) | |
tree | 755473e6db6f129577d1600c418c606d3376bbdd /src/qml | |
parent | 393c92a82170260fc322f7fc389a5594d71a8876 (diff) |
Convert Boolean, Number and DateObject
Change-Id: I8815578422fe1af87eb5f02899f35131fea70b76
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml')
-rw-r--r-- | src/qml/jsruntime/qv4booleanobject.cpp | 4 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4dateobject.cpp | 106 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4dateobject_p.h | 21 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4jsonobject.cpp | 6 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4numberobject.cpp | 4 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4object_p.h | 32 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4serialize.cpp | 2 |
7 files changed, 101 insertions, 74 deletions
diff --git a/src/qml/jsruntime/qv4booleanobject.cpp b/src/qml/jsruntime/qv4booleanobject.cpp index 662ec64efb..b2851abd7d 100644 --- a/src/qml/jsruntime/qv4booleanobject.cpp +++ b/src/qml/jsruntime/qv4booleanobject.cpp @@ -87,7 +87,7 @@ ReturnedValue BooleanPrototype::method_toString(CallContext *ctx) Scoped<BooleanObject> thisObject(scope, ctx->callData->thisObject); if (!thisObject) return ctx->throwTypeError(); - result = thisObject->value.booleanValue(); + result = thisObject->value().booleanValue(); } return Encode(ctx->engine->newString(QLatin1String(result ? "true" : "false"))); @@ -103,5 +103,5 @@ ReturnedValue BooleanPrototype::method_valueOf(CallContext *ctx) if (!thisObject) return ctx->throwTypeError(); - return thisObject->value.asReturnedValue(); + return thisObject->value().asReturnedValue(); } diff --git a/src/qml/jsruntime/qv4dateobject.cpp b/src/qml/jsruntime/qv4dateobject.cpp index ceef88455b..5018dddaaa 100644 --- a/src/qml/jsruntime/qv4dateobject.cpp +++ b/src/qml/jsruntime/qv4dateobject.cpp @@ -647,12 +647,12 @@ DateObject::DateObject(ExecutionEngine *engine, const QDateTime &date) : Object(engine->dateClass) { setVTable(staticVTable()); - value.setDouble(date.isValid() ? date.toMSecsSinceEpoch() : qSNaN()); + data.value.setDouble(date.isValid() ? date.toMSecsSinceEpoch() : qSNaN()); } QDateTime DateObject::toQDateTime() const { - return ToDateTime(value.asDouble(), Qt::LocalTime); + return ToDateTime(date().asDouble(), Qt::LocalTime); } DEFINE_OBJECT_VTABLE(DateCtor); @@ -674,7 +674,7 @@ ReturnedValue DateCtor::construct(Managed *m, CallData *callData) Scope scope(m->engine()); ScopedValue arg(scope, callData->args[0]); if (DateObject *d = arg->asDateObject()) - arg = d->value; + arg = d->date(); else arg = RuntimeHelpers::toPrimitive(arg, PREFERREDTYPE_HINT); @@ -771,7 +771,7 @@ void DatePrototype::init(ExecutionEngine *engine, ObjectRef ctor) double DatePrototype::getThisDate(ExecutionContext *ctx) { if (DateObject *thisObject = ctx->callData->thisObject.asDateObject()) - return thisObject->value.asDouble(); + return thisObject->date().asDouble(); else { ctx->throwTypeError(); return 0; @@ -1012,8 +1012,8 @@ ReturnedValue DatePrototype::method_setTime(CallContext *ctx) return ctx->throwTypeError(); double t = ctx->callData->argc ? ctx->callData->args[0].toNumber() : qSNaN(); - self->value.setDouble(TimeClip(t)); - return self->value.asReturnedValue(); + self->date().setDouble(TimeClip(t)); + return self->date().asReturnedValue(); } ReturnedValue DatePrototype::method_setMilliseconds(CallContext *ctx) @@ -1023,10 +1023,10 @@ ReturnedValue DatePrototype::method_setMilliseconds(CallContext *ctx) if (!self) return ctx->throwTypeError(); - double t = LocalTime(self->value.asDouble()); + double t = LocalTime(self->date().asDouble()); double ms = ctx->callData->argc ? ctx->callData->args[0].toNumber() : qSNaN(); - self->value.setDouble(TimeClip(UTC(MakeDate(Day(t), MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ms))))); - return self->value.asReturnedValue(); + self->date().setDouble(TimeClip(UTC(MakeDate(Day(t), MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ms))))); + return self->date().asReturnedValue(); } ReturnedValue DatePrototype::method_setUTCMilliseconds(CallContext *ctx) @@ -1035,10 +1035,10 @@ ReturnedValue DatePrototype::method_setUTCMilliseconds(CallContext *ctx) if (!self) return ctx->throwTypeError(); - double t = self->value.asDouble(); + double t = self->date().asDouble(); double ms = ctx->callData->argc ? ctx->callData->args[0].toNumber() : qSNaN(); - self->value.setDouble(TimeClip(UTC(MakeDate(Day(t), MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ms))))); - return self->value.asReturnedValue(); + self->date().setDouble(TimeClip(UTC(MakeDate(Day(t), MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ms))))); + return self->date().asReturnedValue(); } ReturnedValue DatePrototype::method_setSeconds(CallContext *ctx) @@ -1047,12 +1047,12 @@ ReturnedValue DatePrototype::method_setSeconds(CallContext *ctx) if (!self) return ctx->throwTypeError(); - double t = LocalTime(self->value.asDouble()); + double t = LocalTime(self->date().asDouble()); double sec = ctx->callData->argc ? ctx->callData->args[0].toNumber() : qSNaN(); double ms = (ctx->callData->argc < 2) ? msFromTime(t) : ctx->callData->args[1].toNumber(); t = TimeClip(UTC(MakeDate(Day(t), MakeTime(HourFromTime(t), MinFromTime(t), sec, ms)))); - self->value.setDouble(t); - return self->value.asReturnedValue(); + self->date().setDouble(t); + return self->date().asReturnedValue(); } ReturnedValue DatePrototype::method_setUTCSeconds(CallContext *ctx) @@ -1061,12 +1061,12 @@ ReturnedValue DatePrototype::method_setUTCSeconds(CallContext *ctx) if (!self) return ctx->throwTypeError(); - double t = self->value.asDouble(); + double t = self->date().asDouble(); double sec = ctx->callData->argc ? ctx->callData->args[0].toNumber() : qSNaN(); double ms = (ctx->callData->argc < 2) ? msFromTime(t) : ctx->callData->args[1].toNumber(); t = TimeClip(UTC(MakeDate(Day(t), MakeTime(HourFromTime(t), MinFromTime(t), sec, ms)))); - self->value.setDouble(t); - return self->value.asReturnedValue(); + self->date().setDouble(t); + return self->date().asReturnedValue(); } ReturnedValue DatePrototype::method_setMinutes(CallContext *ctx) @@ -1075,13 +1075,13 @@ ReturnedValue DatePrototype::method_setMinutes(CallContext *ctx) if (!self) return ctx->throwTypeError(); - double t = LocalTime(self->value.asDouble()); + double t = LocalTime(self->date().asDouble()); double min = ctx->callData->argc ? ctx->callData->args[0].toNumber() : qSNaN(); double sec = (ctx->callData->argc < 2) ? SecFromTime(t) : ctx->callData->args[1].toNumber(); double ms = (ctx->callData->argc < 3) ? msFromTime(t) : ctx->callData->args[2].toNumber(); t = TimeClip(UTC(MakeDate(Day(t), MakeTime(HourFromTime(t), min, sec, ms)))); - self->value.setDouble(t); - return self->value.asReturnedValue(); + self->date().setDouble(t); + return self->date().asReturnedValue(); } ReturnedValue DatePrototype::method_setUTCMinutes(CallContext *ctx) @@ -1090,13 +1090,13 @@ ReturnedValue DatePrototype::method_setUTCMinutes(CallContext *ctx) if (!self) return ctx->throwTypeError(); - double t = self->value.asDouble(); + double t = self->date().asDouble(); double min = ctx->callData->argc ? ctx->callData->args[0].toNumber() : qSNaN(); double sec = (ctx->callData->argc < 2) ? SecFromTime(t) : ctx->callData->args[1].toNumber(); double ms = (ctx->callData->argc < 3) ? msFromTime(t) : ctx->callData->args[2].toNumber(); t = TimeClip(UTC(MakeDate(Day(t), MakeTime(HourFromTime(t), min, sec, ms)))); - self->value.setDouble(t); - return self->value.asReturnedValue(); + self->date().setDouble(t); + return self->date().asReturnedValue(); } ReturnedValue DatePrototype::method_setHours(CallContext *ctx) @@ -1105,14 +1105,14 @@ ReturnedValue DatePrototype::method_setHours(CallContext *ctx) if (!self) return ctx->throwTypeError(); - double t = LocalTime(self->value.asDouble()); + double t = LocalTime(self->date().asDouble()); double hour = ctx->callData->argc ? ctx->callData->args[0].toNumber() : qSNaN(); double min = (ctx->callData->argc < 2) ? MinFromTime(t) : ctx->callData->args[1].toNumber(); double sec = (ctx->callData->argc < 3) ? SecFromTime(t) : ctx->callData->args[2].toNumber(); double ms = (ctx->callData->argc < 4) ? msFromTime(t) : ctx->callData->args[3].toNumber(); t = TimeClip(UTC(MakeDate(Day(t), MakeTime(hour, min, sec, ms)))); - self->value.setDouble(t); - return self->value.asReturnedValue(); + self->date().setDouble(t); + return self->date().asReturnedValue(); } ReturnedValue DatePrototype::method_setUTCHours(CallContext *ctx) @@ -1121,14 +1121,14 @@ ReturnedValue DatePrototype::method_setUTCHours(CallContext *ctx) if (!self) return ctx->throwTypeError(); - double t = self->value.asDouble(); + double t = self->date().asDouble(); double hour = ctx->callData->argc ? ctx->callData->args[0].toNumber() : qSNaN(); double min = (ctx->callData->argc < 2) ? MinFromTime(t) : ctx->callData->args[1].toNumber(); double sec = (ctx->callData->argc < 3) ? SecFromTime(t) : ctx->callData->args[2].toNumber(); double ms = (ctx->callData->argc < 4) ? msFromTime(t) : ctx->callData->args[3].toNumber(); t = TimeClip(UTC(MakeDate(Day(t), MakeTime(hour, min, sec, ms)))); - self->value.setDouble(t); - return self->value.asReturnedValue(); + self->date().setDouble(t); + return self->date().asReturnedValue(); } ReturnedValue DatePrototype::method_setDate(CallContext *ctx) @@ -1137,11 +1137,11 @@ ReturnedValue DatePrototype::method_setDate(CallContext *ctx) if (!self) return ctx->throwTypeError(); - double t = LocalTime(self->value.asDouble()); + double t = LocalTime(self->date().asDouble()); double date = ctx->callData->argc ? ctx->callData->args[0].toNumber() : qSNaN(); t = TimeClip(UTC(MakeDate(MakeDay(YearFromTime(t), MonthFromTime(t), date), TimeWithinDay(t)))); - self->value.setDouble(t); - return self->value.asReturnedValue(); + self->date().setDouble(t); + return self->date().asReturnedValue(); } ReturnedValue DatePrototype::method_setUTCDate(CallContext *ctx) @@ -1150,11 +1150,11 @@ ReturnedValue DatePrototype::method_setUTCDate(CallContext *ctx) if (!self) return ctx->throwTypeError(); - double t = self->value.asDouble(); + double t = self->date().asDouble(); double date = ctx->callData->argc ? ctx->callData->args[0].toNumber() : qSNaN(); t = TimeClip(UTC(MakeDate(MakeDay(YearFromTime(t), MonthFromTime(t), date), TimeWithinDay(t)))); - self->value.setDouble(t); - return self->value.asReturnedValue(); + self->date().setDouble(t); + return self->date().asReturnedValue(); } ReturnedValue DatePrototype::method_setMonth(CallContext *ctx) @@ -1163,12 +1163,12 @@ ReturnedValue DatePrototype::method_setMonth(CallContext *ctx) if (!self) return ctx->throwTypeError(); - double t = LocalTime(self->value.asDouble()); + double t = LocalTime(self->date().asDouble()); double month = ctx->callData->argc ? ctx->callData->args[0].toNumber() : qSNaN(); double date = (ctx->callData->argc < 2) ? DateFromTime(t) : ctx->callData->args[1].toNumber(); t = TimeClip(UTC(MakeDate(MakeDay(YearFromTime(t), month, date), TimeWithinDay(t)))); - self->value.setDouble(t); - return self->value.asReturnedValue(); + self->date().setDouble(t); + return self->date().asReturnedValue(); } ReturnedValue DatePrototype::method_setUTCMonth(CallContext *ctx) @@ -1177,12 +1177,12 @@ ReturnedValue DatePrototype::method_setUTCMonth(CallContext *ctx) if (!self) return ctx->throwTypeError(); - double t = self->value.asDouble(); + double t = self->date().asDouble(); double month = ctx->callData->argc ? ctx->callData->args[0].toNumber() : qSNaN(); double date = (ctx->callData->argc < 2) ? DateFromTime(t) : ctx->callData->args[1].toNumber(); t = TimeClip(UTC(MakeDate(MakeDay(YearFromTime(t), month, date), TimeWithinDay(t)))); - self->value.setDouble(t); - return self->value.asReturnedValue(); + self->date().setDouble(t); + return self->date().asReturnedValue(); } ReturnedValue DatePrototype::method_setYear(CallContext *ctx) @@ -1191,7 +1191,7 @@ ReturnedValue DatePrototype::method_setYear(CallContext *ctx) if (!self) return ctx->throwTypeError(); - double t = self->value.asDouble(); + double t = self->date().asDouble(); if (std::isnan(t)) t = 0; else @@ -1207,8 +1207,8 @@ ReturnedValue DatePrototype::method_setYear(CallContext *ctx) r = UTC(MakeDate(r, TimeWithinDay(t))); r = TimeClip(r); } - self->value.setDouble(r); - return self->value.asReturnedValue(); + self->date().setDouble(r); + return self->date().asReturnedValue(); } ReturnedValue DatePrototype::method_setUTCFullYear(CallContext *ctx) @@ -1217,13 +1217,13 @@ ReturnedValue DatePrototype::method_setUTCFullYear(CallContext *ctx) if (!self) return ctx->throwTypeError(); - double t = self->value.asDouble(); + double t = self->date().asDouble(); double year = ctx->callData->argc ? ctx->callData->args[0].toNumber() : qSNaN(); double month = (ctx->callData->argc < 2) ? MonthFromTime(t) : ctx->callData->args[1].toNumber(); double date = (ctx->callData->argc < 3) ? DateFromTime(t) : ctx->callData->args[2].toNumber(); t = TimeClip(UTC(MakeDate(MakeDay(year, month, date), TimeWithinDay(t)))); - self->value.setDouble(t); - return self->value.asReturnedValue(); + self->date().setDouble(t); + return self->date().asReturnedValue(); } ReturnedValue DatePrototype::method_setFullYear(CallContext *ctx) @@ -1232,15 +1232,15 @@ ReturnedValue DatePrototype::method_setFullYear(CallContext *ctx) if (!self) return ctx->throwTypeError(); - double t = LocalTime(self->value.asDouble()); + double t = LocalTime(self->date().asDouble()); if (std::isnan(t)) t = 0; double year = ctx->callData->argc ? ctx->callData->args[0].toNumber() : qSNaN(); double month = (ctx->callData->argc < 2) ? MonthFromTime(t) : ctx->callData->args[1].toNumber(); double date = (ctx->callData->argc < 3) ? DateFromTime(t) : ctx->callData->args[2].toNumber(); t = TimeClip(UTC(MakeDate(MakeDay(year, month, date), TimeWithinDay(t)))); - self->value.setDouble(t); - return self->value.asReturnedValue(); + self->date().setDouble(t); + return self->date().asReturnedValue(); } ReturnedValue DatePrototype::method_toUTCString(CallContext *ctx) @@ -1249,7 +1249,7 @@ ReturnedValue DatePrototype::method_toUTCString(CallContext *ctx) if (!self) return ctx->throwTypeError(); - double t = self->value.asDouble(); + double t = self->date().asDouble(); return ctx->engine->newString(ToUTCString(t))->asReturnedValue(); } @@ -1272,7 +1272,7 @@ ReturnedValue DatePrototype::method_toISOString(CallContext *ctx) if (!self) return ctx->throwTypeError(); - double t = self->value.asDouble(); + double t = self->date().asDouble(); if (!std::isfinite(t)) return ctx->throwRangeError(ctx->callData->thisObject); diff --git a/src/qml/jsruntime/qv4dateobject_p.h b/src/qml/jsruntime/qv4dateobject_p.h index 7619d553ea..01d4ba88ea 100644 --- a/src/qml/jsruntime/qv4dateobject_p.h +++ b/src/qml/jsruntime/qv4dateobject_p.h @@ -54,18 +54,29 @@ namespace QV4 { struct DateObject: Object { V4_OBJECT Q_MANAGED_TYPE(DateObject) - Value value; - DateObject(ExecutionEngine *engine, const ValueRef date): Object(engine->dateClass) { - value = date; + + struct Data { + Value value; + }; + Data data; + + Value date() const { return data.value; } + Value &date() { return data.value; } + void setDate(const ValueRef d) { data.value = d; } + + DateObject(ExecutionEngine *engine, const ValueRef date) + : Object(engine->dateClass) + { + setDate(date); } - DateObject(ExecutionEngine *engine, const QDateTime &value); + DateObject(ExecutionEngine *engine, const QDateTime &date); QDateTime toQDateTime() const; protected: DateObject(InternalClass *ic): Object(ic) { Q_ASSERT(internalClass()->vtable == staticVTable()); - value = Primitive::fromDouble(qSNaN()); + data.value = Primitive::fromDouble(qSNaN()); } }; diff --git a/src/qml/jsruntime/qv4jsonobject.cpp b/src/qml/jsruntime/qv4jsonobject.cpp index ca82af1b30..c94fb93815 100644 --- a/src/qml/jsruntime/qv4jsonobject.cpp +++ b/src/qml/jsruntime/qv4jsonobject.cpp @@ -733,11 +733,11 @@ QString Stringify::Str(const QString &key, ValueRef v) o = value.asReturnedValue(); if (o) { if (NumberObject *n = o->asNumberObject()) - value = n->value; + value = n->value(); else if (StringObject *so = o->asStringObject()) value = so->value; else if (BooleanObject *b =o->asBooleanObject()) - value = b->value; + value = b->value(); } if (value->isNull()) @@ -939,7 +939,7 @@ ReturnedValue JsonObject::method_stringify(CallContext *ctx) ScopedValue s(scope, ctx->argument(2)); if (NumberObject *n = s->asNumberObject()) - s = n->value; + s = n->value(); else if (StringObject *so = s->asStringObject()) s = so->value; diff --git a/src/qml/jsruntime/qv4numberobject.cpp b/src/qml/jsruntime/qv4numberobject.cpp index c97e86f2cd..1a41150bd2 100644 --- a/src/qml/jsruntime/qv4numberobject.cpp +++ b/src/qml/jsruntime/qv4numberobject.cpp @@ -108,7 +108,7 @@ inline ReturnedValue thisNumberValue(ExecutionContext *ctx) NumberObject *n = ctx->callData->thisObject.asNumberObject(); if (!n) return ctx->throwTypeError(); - return n->value.asReturnedValue(); + return n->value().asReturnedValue(); } inline double thisNumber(ExecutionContext *ctx) @@ -118,7 +118,7 @@ inline double thisNumber(ExecutionContext *ctx) NumberObject *n = ctx->callData->thisObject.asNumberObject(); if (!n) return ctx->throwTypeError(); - return n->value.asDouble(); + return n->value().asDouble(); } ReturnedValue NumberPrototype::method_toString(CallContext *ctx) diff --git a/src/qml/jsruntime/qv4object_p.h b/src/qml/jsruntime/qv4object_p.h index 4fe3a776be..a3689d098a 100644 --- a/src/qml/jsruntime/qv4object_p.h +++ b/src/qml/jsruntime/qv4object_p.h @@ -317,32 +317,48 @@ private: struct BooleanObject: Object { V4_OBJECT Q_MANAGED_TYPE(BooleanObject) - Value value; + + struct Data { + Value value; + }; + Data data; + + Value value() const { return data.value; } + BooleanObject(ExecutionEngine *engine, const ValueRef val) - : Object(engine->booleanClass) { - value = val; + : Object(engine->booleanClass) + { + data.value = val; } protected: BooleanObject(InternalClass *ic) - : Object(ic) { + : Object(ic) + { Q_ASSERT(internalClass()->vtable == staticVTable()); - value = Encode(false); + data.value = Encode(false); } }; struct NumberObject: Object { V4_OBJECT Q_MANAGED_TYPE(NumberObject) - Value value; + + struct Data { + Value value; + }; + Data data; + + Value value() const { return data.value; } + NumberObject(ExecutionEngine *engine, const ValueRef val) : Object(engine->numberClass) { - value = val; + data.value = val; } protected: NumberObject(InternalClass *ic) : Object(ic) { Q_ASSERT(internalClass()->vtable == staticVTable()); - value = Encode((int)0); + data.value = Encode((int)0); } }; diff --git a/src/qml/jsruntime/qv4serialize.cpp b/src/qml/jsruntime/qv4serialize.cpp index 3d754389a2..244ca73efa 100644 --- a/src/qml/jsruntime/qv4serialize.cpp +++ b/src/qml/jsruntime/qv4serialize.cpp @@ -208,7 +208,7 @@ void Serialize::serialize(QByteArray &data, const QV4::ValueRef v, QV8Engine *en } else if (QV4::DateObject *d = v->asDateObject()) { reserve(data, sizeof(quint32) + sizeof(double)); push(data, valueheader(WorkerDate)); - push(data, d->value.asDouble()); + push(data, d->date().asDouble()); } else if (v->as<RegExpObject>()) { Scoped<RegExpObject> re(scope, v); quint32 flags = re->flags(); |