Value ArrayCtor::construct(Managed *, ExecutionContext *ctx, Value *argv, int argc)
{
- ArrayObject *a = ctx->engine->newArrayObject(ctx);
+ ArrayObject *a = ctx->engine->newArrayObject();
uint len;
if (argc == 1 && argv[0].isNumber()) {
bool ok;
return construct(that, ctx, argv, argc);
}
+ArrayPrototype::ArrayPrototype(ExecutionContext *context)
+ : ArrayObject(context->engine)
+{
+}
+
void ArrayPrototype::init(ExecutionContext *ctx, const Value &ctor)
{
ctor.objectValue()->defineReadonlyProperty(ctx->engine->id_length, Value::fromInt32(1));
Value ArrayPrototype::method_concat(SimpleCallContext *ctx)
{
- ArrayObject *result = ctx->engine->newArrayObject(ctx);
+ ArrayObject *result = ctx->engine->newArrayObject();
if (ArrayObject *instance = ctx->thisObject.asArrayObject()) {
result->copyArrayData(instance);
{
Object *o = ctx->thisObject.toObject(ctx);
- ArrayObject *result = ctx->engine->newArrayObject(ctx);
+ ArrayObject *result = ctx->engine->newArrayObject();
uint len = o->get(ctx, ctx->engine->id_length).toUInt32();
double s = ctx->argument(0).toInteger();
uint start;
Object *instance = ctx->thisObject.toObject(ctx);
uint len = getLength(ctx, instance);
- ArrayObject *newArray = ctx->engine->newArrayObject(ctx);
+ ArrayObject *newArray = ctx->engine->newArrayObject();
double rs = ctx->argument(0).toInteger();
uint start;
Value thisArg = ctx->argument(1);
- ArrayObject *a = ctx->engine->newArrayObject(ctx);
+ ArrayObject *a = ctx->engine->newArrayObject();
a->arrayReserve(len);
a->setArrayLengthUnchecked(len);
Value thisArg = ctx->argument(1);
- ArrayObject *a = ctx->engine->newArrayObject(ctx);
+ ArrayObject *a = ctx->engine->newArrayObject();
a->arrayReserve(len);
uint to = 0;
struct ArrayPrototype: ArrayObject
{
- ArrayPrototype(ExecutionContext *context) : ArrayObject(context) {}
+ ArrayPrototype(ExecutionContext *context);
void init(ExecutionContext *ctx, const Value &ctor);
return object;
}
-ArrayObject *ExecutionEngine::newArrayObject(ExecutionContext *ctx)
+ArrayObject *ExecutionEngine::newArrayObject()
{
- ArrayObject *object = new (memoryManager) ArrayObject(ctx);
+ ArrayObject *object = new (memoryManager) ArrayObject(this);
object->prototype = arrayPrototype;
return object;
}
Object *newBooleanObject(const Value &value);
Object *newFunctionObject(ExecutionContext *ctx);
- ArrayObject *newArrayObject(ExecutionContext *ctx);
+ ArrayObject *newArrayObject();
DateObject *newDateObject(const Value &value);
Value JsonParser::parseArray()
{
BEGIN << "parseArray";
- ArrayObject *array = context->engine->newArrayObject(context);
+ ArrayObject *array = context->engine->newArrayObject();
if (++nestingLevel > nestingLimit) {
lastError = QJsonParseError::DeepNesting;
}
}
-void ArrayObject::init(ExecutionContext *context)
+void ArrayObject::init(ExecutionEngine *engine)
{
type = Type_ArrayObject;
- internalClass = context->engine->arrayClass;
+ internalClass = engine->arrayClass;
memberData = new Property[4];
memberData[LengthPropertyIndex].value = Value::fromInt32(0);
LengthPropertyIndex = 0
};
- ArrayObject(ExecutionContext *ctx) : Object(ctx->engine) { init(ctx); }
- void init(ExecutionContext *context);
+ ArrayObject(ExecutionEngine *engine) : Object(engine) { init(engine); }
+ void init(ExecutionEngine *engine);
};
inline uint Object::arrayLength() const
if (!O)
context->throwTypeError();
- ArrayObject *array = context->engine->newArrayObject(context)->asArrayObject();
+ ArrayObject *array = context->engine->newArrayObject();
ObjectIterator it(O, ObjectIterator::NoFlags);
while (1) {
Value v = it.nextPropertyNameAsString();
Object *o = ctx->argument(0).objectValue();
- ArrayObject *a = ctx->engine->newArrayObject(ctx);
+ ArrayObject *a = ctx->engine->newArrayObject();
ObjectIterator it(o, ObjectIterator::EnumberableOnly);
while (1) {
}
// fill in result data
- ArrayObject *array = ctx->engine->newArrayObject(ctx)->asArrayObject();
+ ArrayObject *array = ctx->engine->newArrayObject();
for (int i = 0; i < r->value->captureCount(); ++i) {
int start = matchOffsets[i * 2];
int end = matchOffsets[i * 2 + 1];
void __qmljs_builtin_define_array(ExecutionContext *ctx, Value *array, Value *values, uint length)
{
- ArrayObject *a = ctx->engine->newArrayObject(ctx);
+ ArrayObject *a = ctx->engine->newArrayObject();
// ### FIXME: We need to allocate the array data to avoid crashes other places
// This should rather be done when required
String *lastIndex = context->engine->newString(QStringLiteral("lastIndex"));
rx->put(context, lastIndex, Value::fromInt32(0));
- ArrayObject *a = context->engine->newArrayObject(context);
+ ArrayObject *a = context->engine->newArrayObject();
double previousLastIndex = 0;
uint n = 0;
Value separatorValue = ctx->argumentCount > 0 ? ctx->argument(0) : Value::undefinedValue();
Value limitValue = ctx->argumentCount > 1 ? ctx->argument(1) : Value::undefinedValue();
- ArrayObject* array = ctx->engine->newArrayObject(ctx);
+ ArrayObject* array = ctx->engine->newArrayObject();
Value result = Value::fromObject(array);
if (separatorValue.isUndefined()) {
QV4::Object *o = ConstValuePtr(this)->asObject();
assert(o);
- QV4::ArrayObject *array = currentEngine()->newArrayObject(currentEngine()->current)->asArrayObject();
+ QV4::ArrayObject *array = currentEngine()->newArrayObject();
ObjectIterator it(o, ObjectIterator::WithProtoChain|ObjectIterator::EnumberableOnly);
while (1) {
QV4::Value v = it.nextPropertyNameAsString();
QV4::Object *o = ConstValuePtr(this)->asObject();
assert(o);
QV4::Value arg = QV4::Value::fromObject(o);
- ArrayObject *array = currentEngine()->newArrayObject(currentEngine()->current)->asArrayObject();
+ ArrayObject *array = currentEngine()->newArrayObject();
ObjectIterator it(o, ObjectIterator::EnumberableOnly);
while (1) {
QV4::Value v = it.nextPropertyNameAsString();
{
if (length < 0)
length = 0;
- QV4::ArrayObject *a = currentEngine()->newArrayObject(currentEngine()->current);
+ QV4::ArrayObject *a = currentEngine()->newArrayObject();
if (length < 0x1000)
a->arrayReserve(length);
QV4::Value QJSConverter::toStringList(const QStringList &list)
{
QV4::ExecutionEngine *e = v8::Isolate::GetCurrent()->GetEngine();
- QV4::ArrayObject *a = e->newArrayObject(e->current);
+ QV4::ArrayObject *a = e->newArrayObject();
int len = list.count();
a->arrayReserve(len);
for (int ii = 0; ii < len; ++ii)
*/
QJSValue QJSEngine::newArray(uint length)
{
- QV4::ArrayObject *array = d->m_v4Engine->newArrayObject(d->m_v4Engine->current);
+ QV4::ArrayObject *array = d->m_v4Engine->newArrayObject();
array->setArrayLength(length);
+ for (uint i = 0; i < length; ++i)
+ array->arrayData[i].value = QV4::Value::undefinedValue();
return new QJSValuePrivate(d->m_v4Engine, array);
}
QV4::Value QV4JsonWrapper::fromJsonArray(const QJsonArray &array)
{
int size = array.size();
- ArrayObject *a = m_engine->newArrayObject(m_engine->current);
+ ArrayObject *a = m_engine->newArrayObject();
a->arrayReserve(size);
for (int i = 0; i < size; i++)
a->arrayData[i].value = fromJsonValue(array.at(i));
static QV4::Value arrayFromStringList(QV8Engine *engine, const QStringList &list)
{
QV4::ExecutionEngine *e = QV8Engine::getV4(engine);
- QV4::ArrayObject *a = e->newArrayObject(e->current);
+ QV4::ArrayObject *a = e->newArrayObject();
int len = list.count();
a->arrayReserve(len);
for (int ii = 0; ii < len; ++ii)
static QV4::Value arrayFromVariantList(QV8Engine *engine, const QVariantList &list)
{
QV4::ExecutionEngine *e = QV8Engine::getV4(engine);
- QV4::ArrayObject *a = e->newArrayObject(e->current);
+ QV4::ArrayObject *a = e->newArrayObject();
int len = list.count();
a->arrayReserve(len);
for (int ii = 0; ii < len; ++ii)
QV4::Value QV8Engine::getOwnPropertyNames(const QV4::Value &o)
{
if (!o.asObject())
- return QV4::Value::fromObject(m_v4Engine->newArrayObject(m_v4Engine->current));
+ return QV4::Value::fromObject(m_v4Engine->newArrayObject());
QV4::SimpleCallContext ctx;
QV4::Value args = o;
ctx.arguments = &args;
// elements converted to JS, recursively.
QV4::Value QV8Engine::variantListToJS(const QVariantList &lst)
{
- QV4::ArrayObject *a = m_v4Engine->newArrayObject(m_v4Engine->current);
+ QV4::ArrayObject *a = m_v4Engine->newArrayObject();
a->arrayReserve(lst.size());
for (int i = 0; i < lst.size(); i++)
a->arrayData[i].value = variantToJS(lst.at(i));