diff options
Diffstat (limited to 'src')
32 files changed, 123 insertions, 115 deletions
diff --git a/src/qml/qml/qqmlcontextwrapper.cpp b/src/qml/qml/qqmlcontextwrapper.cpp index 6bdcda9ca6..2413ebe00f 100644 --- a/src/qml/qml/qqmlcontextwrapper.cpp +++ b/src/qml/qml/qqmlcontextwrapper.cpp @@ -126,17 +126,18 @@ void QmlContextWrapper::takeContextOwnership(const Value &qmlglobal) } -Value QmlContextWrapper::get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProperty) +Value QmlContextWrapper::get(Managed *m, String *name, bool *hasProperty) { QmlContextWrapper *resource = m->as<QmlContextWrapper>(); + QV4::ExecutionEngine *v4 = m->engine(); if (!resource) - ctx->throwTypeError(); + v4->current->throwTypeError(); if (resource->isNullWrapper) - return Object::get(m, ctx, name, hasProperty); + return Object::get(m, name, hasProperty); bool hasProp; - Value result = Object::get(m, ctx, name, &hasProp); + Value result = Object::get(m, name, &hasProp); if (hasProp) { if (hasProperty) *hasProperty = hasProp; @@ -206,7 +207,7 @@ Value QmlContextWrapper::get(Managed *m, ExecutionContext *ctx, String *name, bo ep->captureProperty(&context->idValues[propertyIdx].bindings); if (hasProperty) *hasProperty = true; - return QV4::QObjectWrapper::wrap(ctx->engine, context->idValues[propertyIdx]); + return QV4::QObjectWrapper::wrap(v4, context->idValues[propertyIdx]); } else { QQmlContextPrivate *cp = context->asQQmlContextPrivate(); @@ -232,7 +233,7 @@ Value QmlContextWrapper::get(Managed *m, ExecutionContext *ctx, String *name, bo // Search scope object if (scopeObject) { bool hasProp = false; - QV4::Value result = QV4::QObjectWrapper::getQmlProperty(ctx, context, scopeObject, name, QV4::QObjectWrapper::CheckRevision, &hasProp); + QV4::Value result = QV4::QObjectWrapper::getQmlProperty(v4->current, context, scopeObject, name, QV4::QObjectWrapper::CheckRevision, &hasProp); if (hasProp) { if (hasProperty) *hasProperty = true; @@ -245,7 +246,7 @@ Value QmlContextWrapper::get(Managed *m, ExecutionContext *ctx, String *name, bo // Search context object if (context->contextObject) { bool hasProp = false; - QV4::Value result = QV4::QObjectWrapper::getQmlProperty(ctx, context, context->contextObject, name, QV4::QObjectWrapper::CheckRevision, &hasProp); + QV4::Value result = QV4::QObjectWrapper::getQmlProperty(v4->current, context, context->contextObject, name, QV4::QObjectWrapper::CheckRevision, &hasProp); if (hasProp) { if (hasProperty) *hasProperty = true; diff --git a/src/qml/qml/qqmlcontextwrapper_p.h b/src/qml/qml/qqmlcontextwrapper_p.h index 1ef8f7476d..dab10c05c5 100644 --- a/src/qml/qml/qqmlcontextwrapper_p.h +++ b/src/qml/qml/qqmlcontextwrapper_p.h @@ -82,7 +82,7 @@ struct Q_QML_EXPORT QmlContextWrapper : Object void setReadOnly(bool b) { readOnly = b; } - static Value get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProperty); + static Value get(Managed *m, String *name, bool *hasProperty); static void put(Managed *m, ExecutionContext *ctx, String *name, const Value &value); static void destroy(Managed *that); diff --git a/src/qml/qml/qqmllistwrapper.cpp b/src/qml/qml/qqmllistwrapper.cpp index 639a5a585b..aba6b6c192 100644 --- a/src/qml/qml/qqmllistwrapper.cpp +++ b/src/qml/qml/qqmllistwrapper.cpp @@ -97,13 +97,14 @@ QVariant QmlListWrapper::toVariant() const } -Value QmlListWrapper::get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProperty) +Value QmlListWrapper::get(Managed *m, String *name, bool *hasProperty) { + QV4::ExecutionEngine *v4 = m->engine(); QmlListWrapper *w = m->as<QmlListWrapper>(); if (!w) - ctx->throwTypeError(); + v4->current->throwTypeError(); - if (name == ctx->engine->id_length && !w->object.isNull()) { + if (name == v4->id_length && !w->object.isNull()) { quint32 count = w->property.count ? w->property.count(&w->property) : 0; return Value::fromUInt32(count); } diff --git a/src/qml/qml/qqmllistwrapper_p.h b/src/qml/qml/qqmllistwrapper_p.h index 8c52b791f0..3d0a831ae9 100644 --- a/src/qml/qml/qqmllistwrapper_p.h +++ b/src/qml/qml/qqmllistwrapper_p.h @@ -80,7 +80,7 @@ public: QVariant toVariant() const; - static Value get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProperty); + static Value get(Managed *m, String *name, bool *hasProperty); static Value getIndexed(Managed *m, uint index, bool *hasProperty); static void put(Managed *m, ExecutionContext *ctx, String *name, const Value &value); static Property *advanceIterator(Managed *m, ObjectIterator *it, String **name, uint *index, PropertyAttributes *attributes); diff --git a/src/qml/qml/qqmltypewrapper.cpp b/src/qml/qml/qqmltypewrapper.cpp index a41e3c439a..aa03b0e1d9 100644 --- a/src/qml/qml/qqmltypewrapper.cpp +++ b/src/qml/qml/qqmltypewrapper.cpp @@ -114,11 +114,12 @@ Value QmlTypeWrapper::create(QV8Engine *v8, QObject *o, QQmlTypeNameCache *t, co } -Value QmlTypeWrapper::get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProperty) +Value QmlTypeWrapper::get(Managed *m, String *name, bool *hasProperty) { QmlTypeWrapper *w = m->as<QmlTypeWrapper>(); + QV4::ExecutionEngine *v4 = m->engine(); if (!w) - ctx->throwTypeError(); + v4->current->throwTypeError(); if (hasProperty) *hasProperty = true; @@ -158,13 +159,13 @@ Value QmlTypeWrapper::get(Managed *m, ExecutionContext *ctx, String *name, bool } // check for property. - return QV4::QObjectWrapper::getQmlProperty(ctx, context, qobjectSingleton, name, QV4::QObjectWrapper::IgnoreRevision); + return QV4::QObjectWrapper::getQmlProperty(v4->current, context, qobjectSingleton, name, QV4::QObjectWrapper::IgnoreRevision); } else if (!siinfo->scriptApi(e).isUndefined()) { QV4::ExecutionEngine *engine = QV8Engine::getV4(v8engine); // NOTE: if used in a binding, changes will not trigger re-evaluation since non-NOTIFYable. QV4::Object *o = QJSValuePrivate::get(siinfo->scriptApi(e))->getValue(engine).asObject(); if (o) - return o->get(engine->current, name); + return o->get(name); } // Fall through to base implementation @@ -182,7 +183,7 @@ Value QmlTypeWrapper::get(Managed *m, ExecutionContext *ctx, String *name, bool } else if (w->object) { QObject *ao = qmlAttachedPropertiesObjectById(type->attachedPropertiesId(), object); if (ao) - return QV4::QObjectWrapper::getQmlProperty(ctx, context, ao, name, QV4::QObjectWrapper::IgnoreRevision); + return QV4::QObjectWrapper::getQmlProperty(v4->current, context, ao, name, QV4::QObjectWrapper::IgnoreRevision); // Fall through to base implementation } @@ -221,7 +222,7 @@ Value QmlTypeWrapper::get(Managed *m, ExecutionContext *ctx, String *name, bool if (hasProperty) *hasProperty = false; - return Object::get(m, ctx, name, hasProperty); + return Object::get(m, name, hasProperty); } diff --git a/src/qml/qml/qqmltypewrapper_p.h b/src/qml/qml/qqmltypewrapper_p.h index c81b4cc0c9..511406d996 100644 --- a/src/qml/qml/qqmltypewrapper_p.h +++ b/src/qml/qml/qqmltypewrapper_p.h @@ -82,7 +82,7 @@ public: static QV4::Value create(QV8Engine *, QObject *, QQmlTypeNameCache *, const void *, TypeNameMode = IncludeEnums); - static Value get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProperty); + static Value get(Managed *m, String *name, bool *hasProperty); static void put(Managed *m, ExecutionContext *ctx, String *name, const Value &value); static void destroy(Managed *that); diff --git a/src/qml/qml/qqmlvaluetypewrapper.cpp b/src/qml/qml/qqmlvaluetypewrapper.cpp index aaa7db27d6..268cdb30f9 100644 --- a/src/qml/qml/qqmlvaluetypewrapper.cpp +++ b/src/qml/qml/qqmlvaluetypewrapper.cpp @@ -244,11 +244,12 @@ Value QmlValueTypeWrapper::method_toString(SimpleCallContext *ctx) } } -Value QmlValueTypeWrapper::get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProperty) +Value QmlValueTypeWrapper::get(Managed *m, String *name, bool *hasProperty) { QmlValueTypeWrapper *r = m->as<QmlValueTypeWrapper>(); + QV4::ExecutionEngine *v4 = m->engine(); if (!r) - ctx->throwTypeError(); + v4->current->throwTypeError(); QHashedV4String propertystring(Value::fromString(name)); @@ -278,12 +279,12 @@ Value QmlValueTypeWrapper::get(Managed *m, ExecutionContext *ctx, String *name, } if (!result) - return Object::get(m, ctx, name, hasProperty); + return Object::get(m, name, hasProperty); if (result->isFunction()) { // calling a Q_INVOKABLE function of a value type - QQmlContextData *qmlContext = QV4::QmlContextWrapper::callingContext(ctx->engine); - return QV4::QObjectWrapper::getQmlProperty(ctx, qmlContext, r->type, name, QV4::QObjectWrapper::IgnoreRevision); + QQmlContextData *qmlContext = QV4::QmlContextWrapper::callingContext(v4); + return QV4::QObjectWrapper::getQmlProperty(v4->current, qmlContext, r->type, name, QV4::QObjectWrapper::IgnoreRevision); } #define VALUE_TYPE_LOAD(metatype, cpptype, constructor) \ diff --git a/src/qml/qml/qqmlvaluetypewrapper_p.h b/src/qml/qml/qqmlvaluetypewrapper_p.h index ccf4fd300a..d36fc80328 100644 --- a/src/qml/qml/qqmlvaluetypewrapper_p.h +++ b/src/qml/qml/qqmlvaluetypewrapper_p.h @@ -83,7 +83,7 @@ public: bool isEqual(const QVariant& value); - static Value get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProperty); + static Value get(Managed *m, String *name, bool *hasProperty); static void put(Managed *m, ExecutionContext *ctx, String *name, const Value &value); static void destroy(Managed *that); static bool isEqualTo(Managed *m, Managed *other); diff --git a/src/qml/qml/qqmlxmlhttprequest.cpp b/src/qml/qml/qqmlxmlhttprequest.cpp index 0300817b64..8b6471f9bf 100644 --- a/src/qml/qml/qqmlxmlhttprequest.cpp +++ b/src/qml/qml/qqmlxmlhttprequest.cpp @@ -203,7 +203,7 @@ public: static void destroy(Managed *that) { that->as<NamedNodeMap>()->~NamedNodeMap(); } - static Value get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProperty); + static Value get(Managed *m, String *name, bool *hasProperty); static Value getIndexed(Managed *m, uint index, bool *hasProperty); QList<NodeImpl *> list; // Only used in NamedNodeMap @@ -234,7 +234,7 @@ public: static void destroy(Managed *that) { that->as<NodeList>()->~NodeList(); } - static Value get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProperty); + static Value get(Managed *m, String *name, bool *hasProperty); static Value getIndexed(Managed *m, uint index, bool *hasProperty); // C++ API @@ -861,17 +861,18 @@ Value NamedNodeMap::getIndexed(Managed *m, uint index, bool *hasProperty) return Value::undefinedValue(); } -Value NamedNodeMap::get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProperty) +Value NamedNodeMap::get(Managed *m, String *name, bool *hasProperty) { NamedNodeMap *r = m->as<NamedNodeMap>(); + QV4::ExecutionEngine *v4 = m->engine(); if (!r) - ctx->throwTypeError(); + v4->current->throwTypeError(); - name->makeIdentifier(ctx); - if (name->isEqualTo(ctx->engine->id_length)) + name->makeIdentifier(v4->current); + if (name->isEqualTo(v4->id_length)) return Value::fromInt32(r->list.count()); - QV8Engine *engine = ctx->engine->v8Engine; + QV8Engine *engine = v4->v8Engine; QString str = name->toQString(); for (int ii = 0; ii < r->list.count(); ++ii) { @@ -915,17 +916,18 @@ Value NodeList::getIndexed(Managed *m, uint index, bool *hasProperty) return Value::undefinedValue(); } -Value NodeList::get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProperty) +Value NodeList::get(Managed *m, String *name, bool *hasProperty) { + QV4::ExecutionEngine *v4 = m->engine(); NodeList *r = m->as<NodeList>(); if (!r) - ctx->throwTypeError(); + v4->current->throwTypeError(); - name->makeIdentifier(ctx); + name->makeIdentifier(v4->current); - if (name->isEqualTo(ctx->engine->id_length)) + if (name->isEqualTo(v4->id_length)) return Value::fromInt32(r->d->children.count()); - return Object::get(m, ctx, name, hasProperty); + return Object::get(m, name, hasProperty); } Value NodeList::create(QV8Engine *engine, NodeImpl *data) diff --git a/src/qml/qml/v4/qv4arrayobject.cpp b/src/qml/qml/v4/qv4arrayobject.cpp index 3b1d223bb2..5263048791 100644 --- a/src/qml/qml/v4/qv4arrayobject.cpp +++ b/src/qml/qml/v4/qv4arrayobject.cpp @@ -120,7 +120,7 @@ uint ArrayPrototype::getLength(ExecutionContext *ctx, Object *o) { if (o->isArrayObject()) return o->arrayLength(); - return o->get(ctx, ctx->engine->id_length).toUInt32(); + return o->get(ctx->engine->id_length).toUInt32(); } Value ArrayPrototype::method_isArray(SimpleCallContext *ctx) @@ -387,7 +387,7 @@ Value ArrayPrototype::method_slice(SimpleCallContext *ctx) Object *o = ctx->thisObject.toObject(ctx); ArrayObject *result = ctx->engine->newArrayObject(); - uint len = o->get(ctx, ctx->engine->id_length).toUInt32(); + uint len = o->get(ctx->engine->id_length).toUInt32(); double s = ctx->argument(0).toInteger(); uint start; if (s < 0) diff --git a/src/qml/qml/v4/qv4context.cpp b/src/qml/qml/v4/qv4context.cpp index 5d4d941437..88dc30ba1a 100644 --- a/src/qml/qml/v4/qv4context.cpp +++ b/src/qml/qml/v4/qv4context.cpp @@ -362,7 +362,7 @@ Value ExecutionContext::getProperty(String *name) Object *w = static_cast<WithContext *>(ctx)->withObject; hasWith = true; bool hasProperty = false; - Value v = w->get(ctx, name, &hasProperty); + Value v = w->get(name, &hasProperty); if (hasProperty) { return v; } @@ -389,7 +389,7 @@ Value ExecutionContext::getProperty(String *name) } if (c->activation) { bool hasProperty = false; - Value v = c->activation->get(c, name, &hasProperty); + Value v = c->activation->get(name, &hasProperty); if (hasProperty) return v; } @@ -401,7 +401,7 @@ Value ExecutionContext::getProperty(String *name) else if (ctx->type == Type_GlobalContext) { GlobalContext *g = static_cast<GlobalContext *>(ctx); bool hasProperty = false; - Value v = g->global->get(g, name, &hasProperty); + Value v = g->global->get(name, &hasProperty); if (hasProperty) return v; } @@ -424,7 +424,7 @@ Value ExecutionContext::getPropertyNoThrow(String *name) Object *w = static_cast<WithContext *>(ctx)->withObject; hasWith = true; bool hasProperty = false; - Value v = w->get(ctx, name, &hasProperty); + Value v = w->get(name, &hasProperty); if (hasProperty) { return v; } @@ -451,7 +451,7 @@ Value ExecutionContext::getPropertyNoThrow(String *name) } if (c->activation) { bool hasProperty = false; - Value v = c->activation->get(c, name, &hasProperty); + Value v = c->activation->get(name, &hasProperty); if (hasProperty) return v; } @@ -463,7 +463,7 @@ Value ExecutionContext::getPropertyNoThrow(String *name) else if (ctx->type == Type_GlobalContext) { GlobalContext *g = static_cast<GlobalContext *>(ctx); bool hasProperty = false; - Value v = g->global->get(g, name, &hasProperty); + Value v = g->global->get(name, &hasProperty); if (hasProperty) return v; } @@ -486,7 +486,7 @@ Value ExecutionContext::getPropertyAndBase(String *name, Object **base) Object *w = static_cast<WithContext *>(ctx)->withObject; hasWith = true; bool hasProperty = false; - Value v = w->get(ctx, name, &hasProperty); + Value v = w->get(name, &hasProperty); if (hasProperty) { *base = w; return v; @@ -514,7 +514,7 @@ Value ExecutionContext::getPropertyAndBase(String *name, Object **base) } if (c->activation) { bool hasProperty = false; - Value v = c->activation->get(c, name, &hasProperty); + Value v = c->activation->get(name, &hasProperty); if (hasProperty) { *base = c->activation; return v; @@ -528,7 +528,7 @@ Value ExecutionContext::getPropertyAndBase(String *name, Object **base) else if (ctx->type == Type_GlobalContext) { GlobalContext *g = static_cast<GlobalContext *>(ctx); bool hasProperty = false; - Value v = g->global->get(g, name, &hasProperty); + Value v = g->global->get(name, &hasProperty); if (hasProperty) return v; } diff --git a/src/qml/qml/v4/qv4dateobject.cpp b/src/qml/qml/v4/qv4dateobject.cpp index 6e5112c455..83fdc2f9df 100644 --- a/src/qml/qml/v4/qv4dateobject.cpp +++ b/src/qml/qml/v4/qv4dateobject.cpp @@ -1301,7 +1301,7 @@ Value DatePrototype::method_toJSON(SimpleCallContext *ctx) if (tv.isNumber() && !std::isfinite(tv.toNumber())) return Value::nullValue(); - FunctionObject *toIso = O.objectValue()->get(ctx, ctx->engine->newString(QStringLiteral("toISOString"))).asFunctionObject(); + FunctionObject *toIso = O.objectValue()->get(ctx->engine->newString(QStringLiteral("toISOString"))).asFunctionObject(); if (!toIso) ctx->throwTypeError(); diff --git a/src/qml/qml/v4/qv4errorobject.cpp b/src/qml/qml/v4/qv4errorobject.cpp index 6df3ffe96e..ffd30585ab 100644 --- a/src/qml/qml/v4/qv4errorobject.cpp +++ b/src/qml/qml/v4/qv4errorobject.cpp @@ -326,14 +326,14 @@ Value ErrorPrototype::method_toString(SimpleCallContext *ctx) if (!o) ctx->throwTypeError(); - Value name = o->get(ctx, ctx->engine->newString(QString::fromLatin1("name"))); + Value name = o->get(ctx->engine->newString(QString::fromLatin1("name"))); QString qname; if (name.isUndefined()) qname = QString::fromLatin1("Error"); else qname = __qmljs_to_string(name, ctx).stringValue()->toQString(); - Value message = o->get(ctx, ctx->engine->newString(QString::fromLatin1("message"))); + Value message = o->get(ctx->engine->newString(QString::fromLatin1("message"))); QString qmessage; if (!message.isUndefined()) qmessage = __qmljs_to_string(message, ctx).stringValue()->toQString(); diff --git a/src/qml/qml/v4/qv4functionobject.cpp b/src/qml/qml/v4/qv4functionobject.cpp index 5363be6142..a27ac16449 100644 --- a/src/qml/qml/v4/qv4functionobject.cpp +++ b/src/qml/qml/v4/qv4functionobject.cpp @@ -106,7 +106,7 @@ bool FunctionObject::hasInstance(Managed *that, const Value &value) return false; ExecutionContext *ctx = f->engine()->current; - Object *o = f->get(ctx, ctx->engine->id_prototype).asObject(); + Object *o = f->get(ctx->engine->id_prototype).asObject(); if (!o) ctx->throwTypeError(); @@ -127,7 +127,7 @@ Value FunctionObject::construct(Managed *that, ExecutionContext *context, Value FunctionObject *f = static_cast<FunctionObject *>(that); Object *obj = context->engine->newObject(); - Value proto = f->get(context, context->engine->id_prototype); + Value proto = f->get(context->engine->id_prototype); if (proto.isObject()) obj->prototype = proto.objectValue(); return Value::fromObject(obj); @@ -251,7 +251,7 @@ Value FunctionPrototype::method_apply(SimpleCallContext *ctx) QVector<Value> args; if (Object *arr = arg.asObject()) { - quint32 len = arr->get(ctx, ctx->engine->id_length).toUInt32(); + quint32 len = arr->get(ctx->engine->id_length).toUInt32(); for (quint32 i = 0; i < len; ++i) { Value a = arr->getIndexed(i); args.append(a); @@ -351,7 +351,7 @@ Value ScriptFunction::construct(Managed *that, ExecutionContext *context, Value ScriptFunction *f = static_cast<ScriptFunction *>(that); assert(f->function->code); Object *obj = context->engine->newObject(); - Value proto = f->get(context, context->engine->id_prototype); + Value proto = f->get(context->engine->id_prototype); if (proto.isObject()) obj->prototype = proto.objectValue(); @@ -490,7 +490,7 @@ BoundFunction::BoundFunction(ExecutionContext *scope, FunctionObject *target, Va , boundArgs(boundArgs) { vtbl = &static_vtbl; - int len = target->get(scope, scope->engine->id_length).toUInt32(); + int len = target->get(scope->engine->id_length).toUInt32(); len -= boundArgs.size(); if (len < 0) len = 0; diff --git a/src/qml/qml/v4/qv4jsonobject.cpp b/src/qml/qml/v4/qv4jsonobject.cpp index 79e746f5a8..57b241f1ff 100644 --- a/src/qml/qml/v4/qv4jsonobject.cpp +++ b/src/qml/qml/v4/qv4jsonobject.cpp @@ -700,7 +700,7 @@ QString Stringify::Str(const QString &key, Value value) QString result; if (Object *o = value.asObject()) { - FunctionObject *toJSON = o->get(ctx, ctx->engine->newString(QStringLiteral("toJSON"))).asFunctionObject(); + FunctionObject *toJSON = o->get(ctx->engine->newString(QStringLiteral("toJSON"))).asFunctionObject(); if (toJSON) { Value arg = Value::fromString(ctx, key); value = toJSON->call(ctx, value, &arg, 1); @@ -790,7 +790,7 @@ QString Stringify::JO(Object *o) } else { for (int i = 0; i < propertyList.size(); ++i) { bool exists; - Value v = o->get(ctx, propertyList.at(i), &exists); + Value v = o->get(propertyList.at(i), &exists); if (!exists) continue; QString member = makeMember(propertyList.at(i)->toQString(), v); diff --git a/src/qml/qml/v4/qv4lookup.cpp b/src/qml/qml/v4/qv4lookup.cpp index 2292908936..b462777969 100644 --- a/src/qml/qml/v4/qv4lookup.cpp +++ b/src/qml/qml/v4/qv4lookup.cpp @@ -95,11 +95,11 @@ void Lookup::getterGeneric(QV4::Lookup *l, QV4::Value *result, const QV4::Value Value res; if (Managed *m = object.asManaged()) { - res = m->get(m->engine()->current, l->name); + res = m->get(l->name); } else { ExecutionContext *ctx = l->name->engine()->current; Object *o = __qmljs_convert_to_object(ctx, object); - res = o->get(ctx, l->name); + res = o->get(l->name); } if (result) *result = res; diff --git a/src/qml/qml/v4/qv4managed.cpp b/src/qml/qml/v4/qv4managed.cpp index 5d2e856de6..6372719c1f 100644 --- a/src/qml/qml/v4/qv4managed.cpp +++ b/src/qml/qml/v4/qv4managed.cpp @@ -201,9 +201,9 @@ bool Managed::isEqualTo(Managed *, Managed *) return false; } -Value Managed::get(ExecutionContext *ctx, String *name, bool *hasProperty) +Value Managed::get(String *name, bool *hasProperty) { - return vtbl->get(this, ctx, name, hasProperty); + return vtbl->get(this, name, hasProperty); } Value Managed::getIndexed(uint index, bool *hasProperty) diff --git a/src/qml/qml/v4/qv4managed_p.h b/src/qml/qml/v4/qv4managed_p.h index ad1d051d0f..4a8410cb16 100644 --- a/src/qml/qml/v4/qv4managed_p.h +++ b/src/qml/qml/v4/qv4managed_p.h @@ -105,7 +105,7 @@ struct ManagedVTable void (*destroy)(Managed *); void (*collectDeletables)(Managed *, GCDeletable **deletable); bool (*hasInstance)(Managed *, const Value &value); - Value (*get)(Managed *, ExecutionContext *ctx, String *name, bool *hasProperty); + Value (*get)(Managed *, String *name, bool *hasProperty); Value (*getIndexed)(Managed *, uint index, bool *hasProperty); void (*put)(Managed *, ExecutionContext *ctx, String *name, const Value &value); void (*putIndexed)(Managed *, ExecutionContext *ctx, uint index, const Value &value); @@ -262,7 +262,7 @@ public: } Value construct(ExecutionContext *context, Value *args, int argc); Value call(ExecutionContext *context, const Value &thisObject, Value *args, int argc); - Value get(ExecutionContext *ctx, String *name, bool *hasProperty = 0); + Value get(String *name, bool *hasProperty = 0); Value getIndexed(uint index, bool *hasProperty = 0); void put(ExecutionContext *ctx, String *name, const Value &value) { vtbl->put(this, ctx, name, value); } diff --git a/src/qml/qml/v4/qv4object.cpp b/src/qml/qml/v4/qv4object.cpp index 085d90746b..18bea21036 100644 --- a/src/qml/qml/v4/qv4object.cpp +++ b/src/qml/qml/v4/qv4object.cpp @@ -168,7 +168,7 @@ void Object::putValue(ExecutionContext *ctx, Property *pd, PropertyAttributes at void Object::inplaceBinOp(ExecutionContext *ctx, BinOp op, String *name, const Value &rhs) { - Value v = get(ctx, name); + Value v = get(name); Value result; op(ctx, &result, v, rhs); put(ctx, name, result); @@ -394,9 +394,9 @@ bool Object::__hasProperty__(String *name) const return !query(name).isEmpty(); } -Value Object::get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProperty) +Value Object::get(Managed *m, String *name, bool *hasProperty) { - return static_cast<Object *>(m)->internalGet(ctx, name, hasProperty); + return static_cast<Object *>(m)->internalGet(name, hasProperty); } Value Object::getIndexed(Managed *m, uint index, bool *hasProperty) @@ -582,13 +582,13 @@ Property *Object::advanceIterator(Managed *m, ObjectIterator *it, String **name, } // Section 8.12.3 -Value Object::internalGet(ExecutionContext *ctx, String *name, bool *hasProperty) +Value Object::internalGet(String *name, bool *hasProperty) { uint idx = name->asArrayIndex(); if (idx != UINT_MAX) return getIndexed(idx, hasProperty); - name->makeIdentifier(ctx); + name->makeIdentifier(engine()->current); Object *o = this; while (o) { @@ -596,7 +596,7 @@ Value Object::internalGet(ExecutionContext *ctx, String *name, bool *hasProperty if (idx < UINT_MAX) { if (hasProperty) *hasProperty = true; - return getValue(ctx, o->memberData + idx, o->internalClass->propertyData.at(idx)); + return getValue(engine()->current, o->memberData + idx, o->internalClass->propertyData.at(idx)); } o = o->prototype; diff --git a/src/qml/qml/v4/qv4object_p.h b/src/qml/qml/v4/qv4object_p.h index 02b9180acc..9505d2984a 100644 --- a/src/qml/qml/v4/qv4object_p.h +++ b/src/qml/qml/v4/qv4object_p.h @@ -327,8 +327,8 @@ public: void arrayReserve(uint n); void ensureArrayAttributes(); - inline Value get(String *name) - { return vtbl->get(this, engine()->current, name, 0); } + inline Value get(String *name, bool *hasProperty = 0) + { return vtbl->get(this, name, hasProperty); } inline Value getIndexed(uint idx, bool *hasProperty = 0) { return vtbl->getIndexed(this, idx, hasProperty); } inline void put(String *name, const Value &v) @@ -350,7 +350,7 @@ protected: static const ManagedVTable static_vtbl; static void destroy(Managed *that); static void markObjects(Managed *that); - static Value get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProperty); + static Value get(Managed *m, String *name, bool *hasProperty); static Value getIndexed(Managed *m, uint index, bool *hasProperty); static void put(Managed *m, ExecutionContext *ctx, String *name, const Value &value); static void putIndexed(Managed *m, ExecutionContext *ctx, uint index, const Value &value); @@ -364,7 +364,7 @@ protected: private: - Value internalGet(ExecutionContext *ctx, String *name, bool *hasProperty); + Value internalGet(String *name, bool *hasProperty); Value internalGetIndexed(uint index, bool *hasProperty); void internalPut(ExecutionContext *ctx, String *name, const Value &value); void internalPutIndexed(ExecutionContext *ctx, uint index, const Value &value); diff --git a/src/qml/qml/v4/qv4objectproto.cpp b/src/qml/qml/v4/qv4objectproto.cpp index bec56d625e..517d73390b 100644 --- a/src/qml/qml/v4/qv4objectproto.cpp +++ b/src/qml/qml/v4/qv4objectproto.cpp @@ -84,7 +84,7 @@ Value ObjectCtor::construct(Managed *that, ExecutionContext *ctx, Value *args, i ObjectCtor *ctor = static_cast<ObjectCtor *>(that); if (!argc || args[0].isUndefined() || args[0].isNull()) { Object *obj = ctx->engine->newObject(); - Value proto = ctor->get(ctx, ctx->engine->id_prototype); + Value proto = ctor->get(ctx->engine->id_prototype); if (proto.isObject()) obj->prototype = proto.objectValue(); return Value::fromObject(obj); @@ -381,7 +381,7 @@ Value ObjectPrototype::method_toString(SimpleCallContext *ctx) Value ObjectPrototype::method_toLocaleString(SimpleCallContext *ctx) { Object *o = ctx->thisObject.toObject(ctx); - Value ts = o->get(ctx, ctx->engine->newString(QStringLiteral("toString"))); + Value ts = o->get(ctx->engine->newString(QStringLiteral("toString"))); FunctionObject *f = ts.asFunctionObject(); if (!f) ctx->throwTypeError(); @@ -524,13 +524,13 @@ void ObjectPrototype::toPropertyDescriptor(ExecutionContext *ctx, Value v, Prope desc->setSetter(0); if (o->__hasProperty__(ctx->engine->id_enumerable)) - attrs->setEnumerable(o->get(ctx, ctx->engine->id_enumerable).toBoolean()); + attrs->setEnumerable(o->get(ctx->engine->id_enumerable).toBoolean()); if (o->__hasProperty__(ctx->engine->id_configurable)) - attrs->setConfigurable(o->get(ctx, ctx->engine->id_configurable).toBoolean()); + attrs->setConfigurable(o->get(ctx->engine->id_configurable).toBoolean()); if (o->__hasProperty__(ctx->engine->id_get)) { - Value get = o->get(ctx, ctx->engine->id_get); + Value get = o->get(ctx->engine->id_get); FunctionObject *f = get.asFunctionObject(); if (f) { desc->setGetter(f); @@ -543,7 +543,7 @@ void ObjectPrototype::toPropertyDescriptor(ExecutionContext *ctx, Value v, Prope } if (o->__hasProperty__(ctx->engine->id_set)) { - Value set = o->get(ctx, ctx->engine->id_set); + Value set = o->get(ctx->engine->id_set); FunctionObject *f = set.asFunctionObject(); if (f) { desc->setSetter(f); @@ -558,7 +558,7 @@ void ObjectPrototype::toPropertyDescriptor(ExecutionContext *ctx, Value v, Prope if (o->__hasProperty__(ctx->engine->id_writable)) { if (attrs->isAccessor()) ctx->throwTypeError(); - attrs->setWritable(o->get(ctx, ctx->engine->id_writable).toBoolean()); + attrs->setWritable(o->get(ctx->engine->id_writable).toBoolean()); // writable forces it to be a data descriptor desc->value = Value::undefinedValue(); } @@ -566,7 +566,7 @@ void ObjectPrototype::toPropertyDescriptor(ExecutionContext *ctx, Value v, Prope if (o->__hasProperty__(ctx->engine->id_value)) { if (attrs->isAccessor()) ctx->throwTypeError(); - desc->value = o->get(ctx, ctx->engine->id_value); + desc->value = o->get(ctx->engine->id_value); attrs->setType(PropertyAttributes::Data); } diff --git a/src/qml/qml/v4/qv4qobjectwrapper.cpp b/src/qml/qml/v4/qv4qobjectwrapper.cpp index 67f2e07b02..a911c6f066 100644 --- a/src/qml/qml/v4/qv4qobjectwrapper.cpp +++ b/src/qml/qml/v4/qv4qobjectwrapper.cpp @@ -313,7 +313,7 @@ Value QObjectWrapper::getQmlProperty(ExecutionContext *ctx, QQmlContextData *qml } } } - return QV4::Object::get(this, ctx, name, hasProperty); + return QV4::Object::get(this, name, hasProperty); } QQmlData::flushPendingBinding(m_object, result->coreIndex); @@ -604,11 +604,12 @@ QV4::Value QObjectWrapper::create(ExecutionEngine *engine, QQmlData *ddata, QObj return Value::fromObject(new (engine->memoryManager) QV4::QObjectWrapper(engine, object)); } -QV4::Value QObjectWrapper::get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProperty) +QV4::Value QObjectWrapper::get(Managed *m, String *name, bool *hasProperty) { QObjectWrapper *that = static_cast<QObjectWrapper*>(m); - QQmlContextData *qmlContext = QV4::QmlContextWrapper::callingContext(ctx->engine); - return that->getQmlProperty(ctx, qmlContext, name, IgnoreRevision, hasProperty, /*includeImports*/ true); + ExecutionEngine *v4 = m->engine(); + QQmlContextData *qmlContext = QV4::QmlContextWrapper::callingContext(v4); + return that->getQmlProperty(v4->current, qmlContext, name, IgnoreRevision, hasProperty, /*includeImports*/ true); } void QObjectWrapper::put(Managed *m, ExecutionContext *ctx, String *name, const Value &value) diff --git a/src/qml/qml/v4/qv4qobjectwrapper_p.h b/src/qml/qml/v4/qv4qobjectwrapper_p.h index 5aa418adb7..70d21a3205 100644 --- a/src/qml/qml/v4/qv4qobjectwrapper_p.h +++ b/src/qml/qml/v4/qv4qobjectwrapper_p.h @@ -105,7 +105,7 @@ private: String *m_destroy; String *m_toString; - static Value get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProperty); + static Value get(Managed *m, String *name, bool *hasProperty); static void put(Managed *m, ExecutionContext *ctx, String *name, const Value &value); static PropertyAttributes query(const Managed *, String *name); static Property *advanceIterator(Managed *m, ObjectIterator *it, String **name, uint *index, PropertyAttributes *attributes); diff --git a/src/qml/qml/v4/qv4regexp.cpp b/src/qml/qml/v4/qv4regexp.cpp index 475287ae87..33b962e357 100644 --- a/src/qml/qml/v4/qv4regexp.cpp +++ b/src/qml/qml/v4/qv4regexp.cpp @@ -136,7 +136,7 @@ void RegExp::markObjects(Managed *that) { } -Value RegExp::get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProperty) +Value RegExp::get(Managed *m, String *name, bool *hasProperty) { return Value::undefinedValue(); } diff --git a/src/qml/qml/v4/qv4regexp_p.h b/src/qml/qml/v4/qv4regexp_p.h index 1d0a9f4e79..52a998a340 100644 --- a/src/qml/qml/v4/qv4regexp_p.h +++ b/src/qml/qml/v4/qv4regexp_p.h @@ -111,7 +111,7 @@ public: protected: static void destroy(Managed *that); static void markObjects(Managed *that); - static Value get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProperty); + static Value get(Managed *m, String *name, bool *hasProperty); static Value getIndexed(Managed *m, uint index, bool *hasProperty); static void put(Managed *m, ExecutionContext *ctx, String *name, const Value &value); static void putIndexed(Managed *m, ExecutionContext *ctx, uint index, const Value &value); diff --git a/src/qml/qml/v4/qv4runtime.cpp b/src/qml/qml/v4/qv4runtime.cpp index 654314e57a..02dd67a650 100644 --- a/src/qml/qml/v4/qv4runtime.cpp +++ b/src/qml/qml/v4/qv4runtime.cpp @@ -469,14 +469,14 @@ Value __qmljs_object_default_value(Object *object, int typeHint) ExecutionContext *ctx = engine->current; - Value conv = object->get(ctx, meth1); + Value conv = object->get(meth1); if (FunctionObject *o = conv.asFunctionObject()) { Value r = o->call(ctx, Value::fromObject(object), 0, 0); if (r.isPrimitive()) return r; } - conv = object->get(ctx, meth2); + conv = object->get(meth2); if (FunctionObject *o = conv.asFunctionObject()) { Value r = o->call(ctx, Value::fromObject(object), 0, 0); if (r.isPrimitive()) @@ -592,7 +592,7 @@ void __qmljs_get_element(ExecutionContext *ctx, Value *result, const Value &obje } String *name = index.toString(ctx); - Value res = o->get(ctx, name); + Value res = o->get(name); if (result) *result = res; } @@ -669,7 +669,7 @@ void __qmljs_get_property(ExecutionContext *ctx, Value *result, const Value &obj Value res; Managed *m = object.asManaged(); if (m) { - res = m->get(ctx, name); + res = m->get(name); } else { if (object.isNull() || object.isUndefined()) { QString message = QStringLiteral("Cannot read property '%1' of %2").arg(name->toQString()).arg(object.toQString()); @@ -677,7 +677,7 @@ void __qmljs_get_property(ExecutionContext *ctx, Value *result, const Value &obj } m = __qmljs_convert_to_object(ctx, object); - res = m->get(ctx, name); + res = m->get(name); } if (result) *result = res; @@ -818,7 +818,7 @@ void __qmljs_call_property(ExecutionContext *context, Value *result, const Value thisObject = Value::fromObject(static_cast<Object *>(baseObject)); } - Value func = baseObject->get(context, name); + Value func = baseObject->get(name); FunctionObject *o = func.asFunctionObject(); if (!o) { QString error = QString("Property '%1' of object %2 is not a function").arg(name->toQString(), thisObject.toQString()); @@ -861,7 +861,7 @@ void __qmljs_call_element(ExecutionContext *context, Value *result, const Value Object *baseObject = that.toObject(context); Value thisObject = Value::fromObject(baseObject); - Value func = baseObject->get(context, index.toString(context)); + Value func = baseObject->get(index.toString(context)); Object *o = func.asObject(); if (!o) context->throwTypeError(); @@ -921,7 +921,7 @@ void __qmljs_construct_property(ExecutionContext *context, Value *result, const { Object *thisObject = base.toObject(context); - Value func = thisObject->get(context, name); + Value func = thisObject->get(name); if (Object *f = func.asObject()) { Value res = f->construct(context, args, argc); if (result) @@ -1005,7 +1005,7 @@ void __qmljs_builtin_typeof_member(ExecutionContext *context, Value *result, con { Object *obj = base.toObject(context); Value res; - __qmljs_builtin_typeof(context, &res, obj->get(context, name)); + __qmljs_builtin_typeof(context, &res, obj->get(name)); if (result) *result = res; } @@ -1015,7 +1015,7 @@ void __qmljs_builtin_typeof_element(ExecutionContext *context, Value *result, co String *name = index.toString(context); Object *obj = base.toObject(context); Value res; - __qmljs_builtin_typeof(context, &res, obj->get(context, name)); + __qmljs_builtin_typeof(context, &res, obj->get(name)); if (result) *result = res; } @@ -1057,7 +1057,7 @@ void __qmljs_builtin_post_increment_member(ExecutionContext *context, Value *res { Object *o = base.toObject(context); - Value v = o->get(context, name); + Value v = o->get(name); if (v.isInteger() && v.integerValue() < INT_MAX) { if (result) @@ -1137,7 +1137,7 @@ void __qmljs_builtin_post_decrement_member(ExecutionContext *context, Value *res { Object *o = base.toObject(context); - Value v = o->get(context, name); + Value v = o->get(name); if (v.isInteger() && v.integerValue() > INT_MIN) { if (result) diff --git a/src/qml/qml/v4/qv4string.cpp b/src/qml/qml/v4/qv4string.cpp index e47b177d63..33d9b7d303 100644 --- a/src/qml/qml/v4/qv4string.cpp +++ b/src/qml/qml/v4/qv4string.cpp @@ -102,16 +102,17 @@ void String::destroy(Managed *that) static_cast<String*>(that)->~String(); } -Value String::get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProperty) +Value String::get(Managed *m, String *name, bool *hasProperty) { String *that = static_cast<String *>(m); - if (name == ctx->engine->id_length) { + ExecutionEngine *v4 = m->engine(); + if (name == v4->id_length) { if (hasProperty) *hasProperty = true; return Value::fromInt32(that->_text.length()); } PropertyAttributes attrs; - Property *pd = ctx->engine->stringPrototype->__getPropertyDescriptor__(name, &attrs); + Property *pd = v4->stringPrototype->__getPropertyDescriptor__(name, &attrs); if (!pd || attrs.isGeneric()) { if (hasProperty) *hasProperty = false; @@ -119,7 +120,7 @@ Value String::get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProp } if (hasProperty) *hasProperty = true; - return ctx->engine->stringPrototype->getValue(Value::fromString(that), ctx, pd, attrs); + return v4->stringPrototype->getValue(Value::fromString(that), v4->current, pd, attrs); } Value String::getIndexed(Managed *m, uint index, bool *hasProperty) diff --git a/src/qml/qml/v4/qv4string_p.h b/src/qml/qml/v4/qv4string_p.h index 75ce1734f7..3fee3a0d08 100644 --- a/src/qml/qml/v4/qv4string_p.h +++ b/src/qml/qml/v4/qv4string_p.h @@ -120,7 +120,7 @@ struct Q_QML_EXPORT String : public Managed { protected: static void destroy(Managed *); - static Value get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProperty); + static Value get(Managed *m, String *name, bool *hasProperty); static Value getIndexed(Managed *m, uint index, bool *hasProperty); static void put(Managed *m, ExecutionContext *ctx, String *name, const Value &value); static void putIndexed(Managed *m, ExecutionContext *ctx, uint index, const Value &value); diff --git a/src/qml/qml/v4/qv4stringobject.cpp b/src/qml/qml/v4/qv4stringobject.cpp index 472fea5c46..4b30a3e5d6 100644 --- a/src/qml/qml/v4/qv4stringobject.cpp +++ b/src/qml/qml/v4/qv4stringobject.cpp @@ -351,7 +351,7 @@ Value StringPrototype::method_match(SimpleCallContext *context) bool global = rx->global; // ### use the standard builtin function, not the one that might be redefined in the proto - FunctionObject *exec = context->engine->regExpPrototype->get(context, context->engine->newString(QStringLiteral("exec")), 0).asFunctionObject(); + FunctionObject *exec = context->engine->regExpPrototype->get(context->engine->newString(QStringLiteral("exec")), 0).asFunctionObject(); Value arg = Value::fromString(s); if (!global) @@ -368,7 +368,7 @@ Value StringPrototype::method_match(SimpleCallContext *context) if (result.isNull()) break; assert(result.isObject()); - double thisIndex = rx->get(context, lastIndex, 0).toInteger(); + double thisIndex = rx->get(lastIndex, 0).toInteger(); if (previousLastIndex == thisIndex) { previousLastIndex = thisIndex + 1; rx->put(context, lastIndex, Value::fromDouble(previousLastIndex)); diff --git a/src/qml/qml/v4/qv4value.cpp b/src/qml/qml/v4/qv4value.cpp index 5f31a20fd0..44394bc6ca 100644 --- a/src/qml/qml/v4/qv4value.cpp +++ b/src/qml/qml/v4/qv4value.cpp @@ -220,7 +220,7 @@ String *Value::toString(ExecutionContext *ctx) const Value Value::property(ExecutionContext *ctx, String *name) const { - return isObject() ? objectValue()->get(ctx, name) : undefinedValue(); + return isObject() ? objectValue()->get(name) : undefinedValue(); } diff --git a/src/qml/qml/v8/qjsvalue.cpp b/src/qml/qml/v8/qjsvalue.cpp index e2fcbfc113..28234afe89 100644 --- a/src/qml/qml/v8/qjsvalue.cpp +++ b/src/qml/qml/v8/qjsvalue.cpp @@ -803,7 +803,7 @@ QJSValue QJSValue::property(const QString& name) const s->makeIdentifier(engine->current); QV4::ExecutionContext *ctx = engine->current; try { - QV4::Value v = o->get(ctx, s); + QV4::Value v = o->get(s); return new QJSValuePrivate(engine, v); } catch (QV4::Exception &e) { e.accept(ctx); @@ -832,7 +832,7 @@ QJSValue QJSValue::property(quint32 arrayIndex) const ExecutionEngine *engine = d->engine; QV4::ExecutionContext *ctx = engine->current; try { - QV4::Value v = arrayIndex == UINT_MAX ? o->get(ctx, engine->id_uintMax) : o->getIndexed(arrayIndex); + QV4::Value v = arrayIndex == UINT_MAX ? o->get(engine->id_uintMax) : o->getIndexed(arrayIndex); return new QJSValuePrivate(engine, v); } catch (QV4::Exception &e) { e.accept(ctx); diff --git a/src/qml/types/qqmldelegatemodel.cpp b/src/qml/types/qqmldelegatemodel.cpp index b6824252a4..8926615964 100644 --- a/src/qml/types/qqmldelegatemodel.cpp +++ b/src/qml/types/qqmldelegatemodel.cpp @@ -3131,19 +3131,19 @@ public: return QV4::Value::fromObject(object); } - static QV4::Value get(QV4::Managed *m, QV4::ExecutionContext *ctx, QV4::String *name, bool *hasProperty) + static QV4::Value get(QV4::Managed *m, QV4::String *name, bool *hasProperty) { QQmlDelegateModelGroupChangeArray *array = m->as<QQmlDelegateModelGroupChangeArray>(); if (!array) - ctx->throwTypeError(); + m->engine()->current->throwTypeError(); - if (name == ctx->engine->id_length) { + if (name == m->engine()->id_length) { if (hasProperty) *hasProperty = true; return QV4::Value::fromInt32(array->count()); } - return Object::get(m, ctx, name, hasProperty); + return Object::get(m, name, hasProperty); } static void destroy(Managed *that) { QQmlDelegateModelGroupChangeArray *array = that->as<QQmlDelegateModelGroupChangeArray>(); |