Makes more sense than storing a Value in there.
Change-Id: I2e6ca71477100c1e1639bb89cced4f4049b5e5c2
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
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));
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);
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())
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;
{
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)
NumberObject *n = ctx->thisObject().asNumberObject();
if (!n)
return ctx->engine()->throwTypeError();
- return n->value().asReturnedValue();
+ return Encode(n->value());
}
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)
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 {
V4_OBJECT2(NumberObject, Object)
Q_MANAGED_TYPE(NumberObject)
- Value value() const { return d()->value; }
+ double value() const { return d()->value; }
};
struct ArrayObject: Object {
return engine->newStringObject(value);
case Value::Integer_Type:
default: // double
- return engine->newNumberObject(value);
+ return engine->newNumberObject(value.asDouble());
}
}