aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@theqtcompany.com>2015-01-16 12:44:51 +0100
committerLars Knoll <lars.knoll@digia.com>2015-01-23 12:30:41 +0100
commit0c2ab6e20ca23e74055d0a95539315cf1bf360bf (patch)
treeb36a65f2f32c87c7c11661e82d3a881211a79207 /src
parentef6b4938b9ec309d5faf0c966cb2b58f3de2ca77 (diff)
Store a double in NumberObject
Makes more sense than storing a Value in there. Change-Id: I2e6ca71477100c1e1639bb89cced4f4049b5e5c2 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/qml/jsruntime/qv4engine.cpp2
-rw-r--r--src/qml/jsruntime/qv4engine_p.h2
-rw-r--r--src/qml/jsruntime/qv4jsonobject.cpp6
-rw-r--r--src/qml/jsruntime/qv4numberobject.cpp7
-rw-r--r--src/qml/jsruntime/qv4object_p.h14
-rw-r--r--src/qml/jsruntime/qv4runtime.cpp2
6 files changed, 16 insertions, 17 deletions
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp
index 9579f3ddb1..e7ad99b45b 100644
--- a/src/qml/jsruntime/qv4engine.cpp
+++ b/src/qml/jsruntime/qv4engine.cpp
@@ -540,7 +540,7 @@ Heap::Object *ExecutionEngine::newStringObject(const Value &value)
return object->d();
}
-Heap::Object *ExecutionEngine::newNumberObject(const Value &value)
+Heap::Object *ExecutionEngine::newNumberObject(double value)
{
Scope scope(this);
Scoped<NumberObject> object(scope, memoryManager->alloc<NumberObject>(this, value));
diff --git a/src/qml/jsruntime/qv4engine_p.h b/src/qml/jsruntime/qv4engine_p.h
index 124f4e8e24..5709ca909d 100644
--- a/src/qml/jsruntime/qv4engine_p.h
+++ b/src/qml/jsruntime/qv4engine_p.h
@@ -261,7 +261,7 @@ public:
Heap::String *newIdentifier(const QString &text);
Heap::Object *newStringObject(const Value &value);
- Heap::Object *newNumberObject(const Value &value);
+ Heap::Object *newNumberObject(double value);
Heap::Object *newBooleanObject(bool b);
Heap::ArrayObject *newArrayObject(int count = 0);
diff --git a/src/qml/jsruntime/qv4jsonobject.cpp b/src/qml/jsruntime/qv4jsonobject.cpp
index 724a2e0d7b..c8582f13de 100644
--- a/src/qml/jsruntime/qv4jsonobject.cpp
+++ b/src/qml/jsruntime/qv4jsonobject.cpp
@@ -729,11 +729,11 @@ QString Stringify::Str(const QString &key, const Value &v)
o = value->asReturnedValue();
if (o) {
if (NumberObject *n = o->asNumberObject())
- value = n->value();
+ value = Encode(n->value());
else if (StringObject *so = o->asStringObject())
value = so->d()->value;
else if (BooleanObject *b =o->asBooleanObject())
- value = b->value();
+ value = Encode(b->value());
}
if (value->isNull())
@@ -934,7 +934,7 @@ ReturnedValue JsonObject::method_stringify(CallContext *ctx)
ScopedValue s(scope, ctx->argument(2));
if (NumberObject *n = s->asNumberObject())
- s = n->value();
+ s = Encode(n->value());
else if (StringObject *so = s->asStringObject())
s = so->d()->value;
diff --git a/src/qml/jsruntime/qv4numberobject.cpp b/src/qml/jsruntime/qv4numberobject.cpp
index bbe6bb977c..acabe34af5 100644
--- a/src/qml/jsruntime/qv4numberobject.cpp
+++ b/src/qml/jsruntime/qv4numberobject.cpp
@@ -54,8 +54,7 @@ ReturnedValue NumberCtor::construct(Managed *m, CallData *callData)
{
Scope scope(m->cast<NumberCtor>()->engine());
double dbl = callData->argc ? callData->args[0].toNumber() : 0.;
- ScopedValue d(scope, QV4::Primitive::fromDouble(dbl));
- return Encode(scope.engine->newNumberObject(d));
+ return Encode(scope.engine->newNumberObject(dbl));
}
ReturnedValue NumberCtor::call(Managed *, CallData *callData)
@@ -101,7 +100,7 @@ inline ReturnedValue thisNumberValue(ExecutionContext *ctx)
NumberObject *n = ctx->thisObject().asNumberObject();
if (!n)
return ctx->engine()->throwTypeError();
- return n->value().asReturnedValue();
+ return Encode(n->value());
}
inline double thisNumber(ExecutionContext *ctx)
@@ -111,7 +110,7 @@ inline double thisNumber(ExecutionContext *ctx)
NumberObject *n = ctx->thisObject().asNumberObject();
if (!n)
return ctx->engine()->throwTypeError();
- return n->value().asDouble();
+ return n->value();
}
ReturnedValue NumberPrototype::method_toString(CallContext *ctx)
diff --git a/src/qml/jsruntime/qv4object_p.h b/src/qml/jsruntime/qv4object_p.h
index 4e88cd785e..6dc58a60e2 100644
--- a/src/qml/jsruntime/qv4object_p.h
+++ b/src/qml/jsruntime/qv4object_p.h
@@ -348,17 +348,17 @@ struct BooleanObject : Object {
struct NumberObject : Object {
NumberObject(InternalClass *ic, QV4::Object *prototype)
- : Object(ic, prototype)
+ : Object(ic, prototype),
+ value(0)
{
- value = Encode((int)0);
}
- NumberObject(ExecutionEngine *engine, const Value &val)
- : Object(engine->emptyClass, engine->numberPrototype.asObject())
+ NumberObject(ExecutionEngine *engine, double val)
+ : Object(engine->emptyClass, engine->numberPrototype.asObject()),
+ value(val)
{
- value = val;
}
- Value value;
+ double value;
};
struct ArrayObject : Object {
@@ -391,7 +391,7 @@ struct NumberObject: Object {
V4_OBJECT2(NumberObject, Object)
Q_MANAGED_TYPE(NumberObject)
- Value value() const { return d()->value; }
+ double value() const { return d()->value; }
};
struct ArrayObject: Object {
diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp
index 4167823c6b..28f2a59307 100644
--- a/src/qml/jsruntime/qv4runtime.cpp
+++ b/src/qml/jsruntime/qv4runtime.cpp
@@ -441,7 +441,7 @@ Heap::Object *RuntimeHelpers::convertToObject(ExecutionEngine *engine, const Val
return engine->newStringObject(value);
case Value::Integer_Type:
default: // double
- return engine->newNumberObject(value);
+ return engine->newNumberObject(value.asDouble());
}
}