aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2014-04-05 21:03:37 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2014-07-22 13:48:55 +0200
commit1b008d6fb89c82d4a31d30cc1abe3128c723a851 (patch)
tree755473e6db6f129577d1600c418c606d3376bbdd /src/qml
parent393c92a82170260fc322f7fc389a5594d71a8876 (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.cpp4
-rw-r--r--src/qml/jsruntime/qv4dateobject.cpp106
-rw-r--r--src/qml/jsruntime/qv4dateobject_p.h21
-rw-r--r--src/qml/jsruntime/qv4jsonobject.cpp6
-rw-r--r--src/qml/jsruntime/qv4numberobject.cpp4
-rw-r--r--src/qml/jsruntime/qv4object_p.h32
-rw-r--r--src/qml/jsruntime/qv4serialize.cpp2
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();