Simplify function signature for ExecutionEngine::newArrayObject
authorLars Knoll <lars.knoll@digia.com>
Tue, 30 Apr 2013 21:43:26 +0000 (23:43 +0200)
committerSimon Hausmann <simon.hausmann@digia.com>
Wed, 1 May 2013 19:55:33 +0000 (21:55 +0200)
Change-Id: Id8d79e0029816a043798feaee97e1ecb05d5c856
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
16 files changed:
src/qml/qml/v4/qv4arrayobject.cpp
src/qml/qml/v4/qv4arrayobject_p.h
src/qml/qml/v4/qv4engine.cpp
src/qml/qml/v4/qv4engine_p.h
src/qml/qml/v4/qv4jsonobject.cpp
src/qml/qml/v4/qv4object.cpp
src/qml/qml/v4/qv4object_p.h
src/qml/qml/v4/qv4objectproto.cpp
src/qml/qml/v4/qv4regexpobject.cpp
src/qml/qml/v4/qv4runtime.cpp
src/qml/qml/v4/qv4stringobject.cpp
src/qml/qml/v4/qv4v8.cpp
src/qml/qml/v8/qjsconverter_impl_p.h
src/qml/qml/v8/qjsengine.cpp
src/qml/qml/v8/qv4jsonwrapper.cpp
src/qml/qml/v8/qv8engine.cpp

index b489c78..04421ed 100644 (file)
@@ -54,7 +54,7 @@ ArrayCtor::ArrayCtor(ExecutionContext *scope)
 
 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;
@@ -82,6 +82,11 @@ Value ArrayCtor::call(Managed *that, ExecutionContext *ctx, const Value &thisObj
     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));
@@ -137,7 +142,7 @@ Value ArrayPrototype::method_toLocaleString(SimpleCallContext *ctx)
 
 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);
@@ -381,7 +386,7 @@ Value ArrayPrototype::method_slice(SimpleCallContext *ctx)
 {
     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;
@@ -430,7 +435,7 @@ Value ArrayPrototype::method_splice(SimpleCallContext *ctx)
     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;
@@ -712,7 +717,7 @@ Value ArrayPrototype::method_map(SimpleCallContext *ctx)
 
     Value thisArg = ctx->argument(1);
 
-    ArrayObject *a = ctx->engine->newArrayObject(ctx);
+    ArrayObject *a = ctx->engine->newArrayObject();
     a->arrayReserve(len);
     a->setArrayLengthUnchecked(len);
 
@@ -744,7 +749,7 @@ Value ArrayPrototype::method_filter(SimpleCallContext *ctx)
 
     Value thisArg = ctx->argument(1);
 
-    ArrayObject *a = ctx->engine->newArrayObject(ctx);
+    ArrayObject *a = ctx->engine->newArrayObject();
     a->arrayReserve(len);
 
     uint to = 0;
index a76510c..4201997 100644 (file)
@@ -62,7 +62,7 @@ protected:
 
 struct ArrayPrototype: ArrayObject
 {
-    ArrayPrototype(ExecutionContext *context) : ArrayObject(context) {}
+    ArrayPrototype(ExecutionContext *context);
 
     void init(ExecutionContext *ctx, const Value &ctor);
 
index 4fcde52..3bb19d1 100644 (file)
@@ -408,9 +408,9 @@ Object *ExecutionEngine::newFunctionObject(ExecutionContext *ctx)
     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;
 }
index de894a5..1f0fc9a 100644 (file)
@@ -226,7 +226,7 @@ struct Q_QML_EXPORT ExecutionEngine
     Object *newBooleanObject(const Value &value);
     Object *newFunctionObject(ExecutionContext *ctx);
 
-    ArrayObject *newArrayObject(ExecutionContext *ctx);
+    ArrayObject *newArrayObject();
 
     DateObject *newDateObject(const Value &value);
 
index 2e91229..b2d5d7b 100644 (file)
@@ -293,7 +293,7 @@ bool JsonParser::parseMember(Object *o)
 Value JsonParser::parseArray()
 {
     BEGIN << "parseArray";
-    ArrayObject *array = context->engine->newArrayObject(context);
+    ArrayObject *array = context->engine->newArrayObject();
 
     if (++nestingLevel > nestingLimit) {
         lastError = QJsonParseError::DeepNesting;
index 42ec8f2..405be3f 100644 (file)
@@ -1231,10 +1231,10 @@ void Object::markArrayObjects() const
     }
 }
 
-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);
index 675c149..e7e7818 100644 (file)
@@ -388,8 +388,8 @@ struct ArrayObject: Object {
         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
index 01e14cf..5787421 100644 (file)
@@ -156,7 +156,7 @@ Value ObjectPrototype::method_getOwnPropertyNames(SimpleCallContext *context)
     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();
@@ -354,7 +354,7 @@ Value ObjectPrototype::method_keys(SimpleCallContext *ctx)
 
     Object *o = ctx->argument(0).objectValue();
 
-    ArrayObject *a = ctx->engine->newArrayObject(ctx);
+    ArrayObject *a = ctx->engine->newArrayObject();
 
     ObjectIterator it(o, ObjectIterator::EnumberableOnly);
     while (1) {
index 622c46e..6183315 100644 (file)
@@ -200,7 +200,7 @@ Value RegExpPrototype::method_exec(SimpleCallContext *ctx)
     }
 
     // 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];
index b510d4c..b7a2fb4 100644 (file)
@@ -1229,7 +1229,7 @@ void __qmljs_builtin_define_property(ExecutionContext *ctx, const Value &object,
 
 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
index 53a0fcf..faa778f 100644 (file)
@@ -324,7 +324,7 @@ Value StringPrototype::method_match(SimpleCallContext *context)
 
     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;
@@ -542,7 +542,7 @@ Value StringPrototype::method_split(SimpleCallContext *ctx)
     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()) {
index b476f39..914fd12 100644 (file)
@@ -943,7 +943,7 @@ Local<Array> Object::GetPropertyNames()
     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();
@@ -959,7 +959,7 @@ Local<Array> Object::GetOwnPropertyNames()
     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();
@@ -1115,7 +1115,7 @@ Local<Array> Array::New(int length)
 {
     if (length < 0)
         length = 0;
-    QV4::ArrayObject *a = currentEngine()->newArrayObject(currentEngine()->current);
+    QV4::ArrayObject *a = currentEngine()->newArrayObject();
     if (length < 0x1000)
         a->arrayReserve(length);
 
index 16bd330..99a34cc 100644 (file)
@@ -126,7 +126,7 @@ QV4::RegExpObject *QJSConverter::toRegExp(const QRegExp &re)
 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)
index b842e05..c2fd45a 100644 (file)
@@ -291,8 +291,10 @@ QJSValue QJSEngine::newObject()
 */
 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);
 }
 
index 01cc194..7aee1fd 100644 (file)
@@ -149,7 +149,7 @@ QJsonObject QV4JsonWrapper::toJsonObject(QV4::Object *o, V4ObjectSet &visitedObj
 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));
index c5f022e..e452d98 100644 (file)
@@ -284,7 +284,7 @@ QVariant QV8Engine::toVariant(const QV4::Value &value, int typeHint)
 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)
@@ -296,7 +296,7 @@ static QV4::Value arrayFromStringList(QV8Engine *engine, const QStringList &list
 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)
@@ -485,7 +485,7 @@ const QStringHash<bool> &QV8Engine::illegalNames() const
 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;
@@ -913,7 +913,7 @@ QV4::Value QV8Engine::global()
 // 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));