From: Lars Knoll Date: Sat, 5 Apr 2014 19:03:37 +0000 (+0200) Subject: Convert Boolean, Number and DateObject X-Git-Tag: v5.3.99+beta1~328 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1b008d6fb89c82d4a31d30cc1abe3128c723a851;p=platform%2Fupstream%2Fqtdeclarative.git Convert Boolean, Number and DateObject Change-Id: I8815578422fe1af87eb5f02899f35131fea70b76 Reviewed-by: Simon Hausmann --- diff --git a/src/qml/jsruntime/qv4booleanobject.cpp b/src/qml/jsruntime/qv4booleanobject.cpp index 662ec64..b2851ab 100644 --- a/src/qml/jsruntime/qv4booleanobject.cpp +++ b/src/qml/jsruntime/qv4booleanobject.cpp @@ -87,7 +87,7 @@ ReturnedValue BooleanPrototype::method_toString(CallContext *ctx) Scoped 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 ceef884..5018ddd 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 7619d55..01d4ba8 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 ca82af1..c94fb93 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 c97e86f..1a41150 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 4fe3a77..a3689d0 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 3d75438..244ca73 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()) { Scoped re(scope, v); quint32 flags = re->flags();