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>
This commit is contained in:
Lars Knoll 2015-01-16 12:44:51 +01:00 committed by Lars Knoll
parent ef6b4938b9
commit 0c2ab6e20c
6 changed files with 16 additions and 17 deletions

View File

@ -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));

View File

@ -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);

View File

@ -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;

View File

@ -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)

View File

@ -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 {

View File

@ -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());
}
}