diff options
40 files changed, 153 insertions, 138 deletions
diff --git a/src/qml/jsruntime/qv4argumentsobject_p.h b/src/qml/jsruntime/qv4argumentsobject_p.h index ff233da077..f215d986be 100644 --- a/src/qml/jsruntime/qv4argumentsobject_p.h +++ b/src/qml/jsruntime/qv4argumentsobject_p.h @@ -42,9 +42,9 @@ namespace QV4 { struct ArgumentsGetterFunction: FunctionObject { - struct Data : FunctionObject::Data { + struct Data : Heap::FunctionObject { Data(ExecutionContext *scope, uint index) - : FunctionObject::Data(scope) + : Heap::FunctionObject(scope) , index(index) { setVTable(staticVTable()); @@ -60,9 +60,9 @@ struct ArgumentsGetterFunction: FunctionObject struct ArgumentsSetterFunction: FunctionObject { - struct Data : FunctionObject::Data { + struct Data : Heap::FunctionObject { Data(ExecutionContext *scope, uint index) - : FunctionObject::Data(scope) + : Heap::FunctionObject(scope) , index(index) { setVTable(staticVTable()); diff --git a/src/qml/jsruntime/qv4arraybuffer.cpp b/src/qml/jsruntime/qv4arraybuffer.cpp index 134228e943..55a80f2315 100644 --- a/src/qml/jsruntime/qv4arraybuffer.cpp +++ b/src/qml/jsruntime/qv4arraybuffer.cpp @@ -40,7 +40,7 @@ DEFINE_OBJECT_VTABLE(ArrayBufferCtor); DEFINE_OBJECT_VTABLE(ArrayBuffer); ArrayBufferCtor::Data::Data(ExecutionContext *scope) - : FunctionObject::Data(scope, QStringLiteral("ArrayBuffer")) + : Heap::FunctionObject(scope, QStringLiteral("ArrayBuffer")) { setVTable(staticVTable()); } diff --git a/src/qml/jsruntime/qv4arraybuffer_p.h b/src/qml/jsruntime/qv4arraybuffer_p.h index 6941a5153f..e1bf1d7ef0 100644 --- a/src/qml/jsruntime/qv4arraybuffer_p.h +++ b/src/qml/jsruntime/qv4arraybuffer_p.h @@ -42,7 +42,7 @@ namespace QV4 { struct ArrayBufferCtor: FunctionObject { - struct Data : FunctionObject::Data { + struct Data : Heap::FunctionObject { Data(ExecutionContext *scope); }; diff --git a/src/qml/jsruntime/qv4arrayobject.cpp b/src/qml/jsruntime/qv4arrayobject.cpp index 59d0c35be3..5da80c63ba 100644 --- a/src/qml/jsruntime/qv4arrayobject.cpp +++ b/src/qml/jsruntime/qv4arrayobject.cpp @@ -42,7 +42,7 @@ using namespace QV4; DEFINE_OBJECT_VTABLE(ArrayCtor); ArrayCtor::Data::Data(ExecutionContext *scope) - : FunctionObject::Data(scope, QStringLiteral("Array")) + : Heap::FunctionObject(scope, QStringLiteral("Array")) { setVTable(staticVTable()); } diff --git a/src/qml/jsruntime/qv4arrayobject_p.h b/src/qml/jsruntime/qv4arrayobject_p.h index 9cd967ddd9..4c211701ce 100644 --- a/src/qml/jsruntime/qv4arrayobject_p.h +++ b/src/qml/jsruntime/qv4arrayobject_p.h @@ -43,7 +43,7 @@ namespace QV4 { struct ArrayCtor: FunctionObject { - struct Data : FunctionObject::Data { + struct Data : Heap::FunctionObject { Data(ExecutionContext *scope); }; diff --git a/src/qml/jsruntime/qv4booleanobject.cpp b/src/qml/jsruntime/qv4booleanobject.cpp index 17f638426a..345d32f3bd 100644 --- a/src/qml/jsruntime/qv4booleanobject.cpp +++ b/src/qml/jsruntime/qv4booleanobject.cpp @@ -39,7 +39,7 @@ DEFINE_OBJECT_VTABLE(BooleanCtor); DEFINE_OBJECT_VTABLE(BooleanObject); BooleanCtor::Data::Data(ExecutionContext *scope) - : FunctionObject::Data(scope, QStringLiteral("Boolean")) + : Heap::FunctionObject(scope, QStringLiteral("Boolean")) { setVTable(staticVTable()); } diff --git a/src/qml/jsruntime/qv4booleanobject_p.h b/src/qml/jsruntime/qv4booleanobject_p.h index 2e96b72b64..ddd212eb79 100644 --- a/src/qml/jsruntime/qv4booleanobject_p.h +++ b/src/qml/jsruntime/qv4booleanobject_p.h @@ -43,7 +43,7 @@ namespace QV4 { struct BooleanCtor: FunctionObject { - struct Data : FunctionObject::Data { + struct Data : Heap::FunctionObject { Data(ExecutionContext *scope); }; diff --git a/src/qml/jsruntime/qv4context.cpp b/src/qml/jsruntime/qv4context.cpp index c9dd694cd3..caa98604c8 100644 --- a/src/qml/jsruntime/qv4context.cpp +++ b/src/qml/jsruntime/qv4context.cpp @@ -158,7 +158,7 @@ Heap::CatchContext::CatchContext(ExecutionEngine *engine, QV4::String *exception this->exceptionValue = exceptionValue; } -Heap::CallContext::CallContext(ExecutionEngine *engine, QV4::Object *qml, FunctionObject *function) +Heap::CallContext::CallContext(ExecutionEngine *engine, QV4::Object *qml, QV4::FunctionObject *function) : Heap::ExecutionContext(engine, Heap::ExecutionContext::Type_QmlContext) { this->function = function; diff --git a/src/qml/jsruntime/qv4context_p.h b/src/qml/jsruntime/qv4context_p.h index 281f80bef6..6bb926db92 100644 --- a/src/qml/jsruntime/qv4context_p.h +++ b/src/qml/jsruntime/qv4context_p.h @@ -111,7 +111,7 @@ struct CallContext : ExecutionContext { } CallContext(ExecutionEngine *engine, Object *qml, QV4::FunctionObject *function); - FunctionObject *function; + QV4::FunctionObject *function; int realArgumentCount; Value *locals; Object *activation; diff --git a/src/qml/jsruntime/qv4dataview.cpp b/src/qml/jsruntime/qv4dataview.cpp index df689c6a39..8c0f109ff4 100644 --- a/src/qml/jsruntime/qv4dataview.cpp +++ b/src/qml/jsruntime/qv4dataview.cpp @@ -42,7 +42,7 @@ DEFINE_OBJECT_VTABLE(DataViewCtor); DEFINE_OBJECT_VTABLE(DataView); DataViewCtor::Data::Data(ExecutionContext *scope) - : FunctionObject::Data(scope, QStringLiteral("DataView")) + : Heap::FunctionObject(scope, QStringLiteral("DataView")) { setVTable(staticVTable()); } diff --git a/src/qml/jsruntime/qv4dataview_p.h b/src/qml/jsruntime/qv4dataview_p.h index df0ed881b4..1e504aaf0f 100644 --- a/src/qml/jsruntime/qv4dataview_p.h +++ b/src/qml/jsruntime/qv4dataview_p.h @@ -44,7 +44,7 @@ struct ArrayBuffer; struct DataViewCtor: FunctionObject { - struct Data : FunctionObject::Data { + struct Data : Heap::FunctionObject { Data(ExecutionContext *scope); }; diff --git a/src/qml/jsruntime/qv4dateobject.cpp b/src/qml/jsruntime/qv4dateobject.cpp index 9b3510fd92..9a43d6a321 100644 --- a/src/qml/jsruntime/qv4dateobject.cpp +++ b/src/qml/jsruntime/qv4dateobject.cpp @@ -649,7 +649,7 @@ QDateTime DateObject::toQDateTime() const DEFINE_OBJECT_VTABLE(DateCtor); DateCtor::Data::Data(ExecutionContext *scope) - : FunctionObject::Data(scope, QStringLiteral("Date")) + : Heap::FunctionObject(scope, QStringLiteral("Date")) { setVTable(staticVTable()); } diff --git a/src/qml/jsruntime/qv4dateobject_p.h b/src/qml/jsruntime/qv4dateobject_p.h index dfc17b391d..a3d1f23b1d 100644 --- a/src/qml/jsruntime/qv4dateobject_p.h +++ b/src/qml/jsruntime/qv4dateobject_p.h @@ -72,7 +72,7 @@ struct DateObject: Object { struct DateCtor: FunctionObject { - struct Data : FunctionObject::Data { + struct Data : Heap::FunctionObject { Data(ExecutionContext *scope); }; V4_OBJECT(FunctionObject) diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index 865574425c..e4fcb2a8fd 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -299,13 +299,13 @@ ExecutionEngine::ExecutionEngine(EvalISelFactory *factory) InternalClass *functionProtoClass = InternalClass::create(this, FunctionObject::staticVTable(), objectPrototype); uint index; functionProtoClass = functionProtoClass->addMember(id_prototype, Attr_NotEnumerable, &index); - Q_ASSERT(index == FunctionObject::Index_Prototype); + Q_ASSERT(index == Heap::FunctionObject::Index_Prototype); ScopedObject functionPrototype(scope, memoryManager->alloc<FunctionPrototype>(functionProtoClass)); functionClass = InternalClass::create(this, FunctionObject::staticVTable(), functionPrototype); functionClass = functionClass->addMember(id_prototype, Attr_NotEnumerable|Attr_NotConfigurable, &index); - Q_ASSERT(index == FunctionObject::Index_Prototype); + Q_ASSERT(index == Heap::FunctionObject::Index_Prototype); protoClass = objectClass->addMember(id_constructor, Attr_NotEnumerable, &index); - Q_ASSERT(index == FunctionObject::Index_ProtoConstructor); + Q_ASSERT(index == Heap::FunctionObject::Index_ProtoConstructor); Scoped<RegExpPrototype> regExpPrototype(scope, memoryManager->alloc<RegExpPrototype>(InternalClass::create(this, RegExpPrototype::staticVTable(), objectPrototype))); regExpClass = InternalClass::create(this, RegExpObject::staticVTable(), regExpPrototype.getPointer()); diff --git a/src/qml/jsruntime/qv4errorobject.cpp b/src/qml/jsruntime/qv4errorobject.cpp index d05d3b1e36..9bd6597a6d 100644 --- a/src/qml/jsruntime/qv4errorobject.cpp +++ b/src/qml/jsruntime/qv4errorobject.cpp @@ -246,13 +246,13 @@ DEFINE_OBJECT_VTABLE(TypeErrorCtor); DEFINE_OBJECT_VTABLE(URIErrorCtor); ErrorCtor::Data::Data(ExecutionContext *scope) - : FunctionObject::Data(scope, QStringLiteral("Error")) + : Heap::FunctionObject(scope, QStringLiteral("Error")) { setVTable(staticVTable()); } ErrorCtor::Data::Data(ExecutionContext *scope, const QString &name) - : FunctionObject::Data(scope, name) + : Heap::FunctionObject(scope, name) { setVTable(staticVTable()); } diff --git a/src/qml/jsruntime/qv4errorobject_p.h b/src/qml/jsruntime/qv4errorobject_p.h index 7105050dea..3d438352aa 100644 --- a/src/qml/jsruntime/qv4errorobject_p.h +++ b/src/qml/jsruntime/qv4errorobject_p.h @@ -123,7 +123,7 @@ struct URIErrorObject: ErrorObject { struct ErrorCtor: FunctionObject { - struct Data : FunctionObject::Data { + struct Data : Heap::FunctionObject { Data(ExecutionContext *scope); Data(ExecutionContext *scope, const QString &name); }; diff --git a/src/qml/jsruntime/qv4functionobject.cpp b/src/qml/jsruntime/qv4functionobject.cpp index cfe4af9be3..ecfd64bbd9 100644 --- a/src/qml/jsruntime/qv4functionobject.cpp +++ b/src/qml/jsruntime/qv4functionobject.cpp @@ -62,7 +62,7 @@ using namespace QV4; DEFINE_OBJECT_VTABLE(FunctionObject); -FunctionObject::Data::Data(ExecutionContext *scope, String *name, bool createProto) +Heap::FunctionObject::FunctionObject(QV4::ExecutionContext *scope, QV4::String *name, bool createProto) : Heap::Object(scope->d()->engine->functionClass) , scope(scope) { @@ -72,7 +72,7 @@ FunctionObject::Data::Data(ExecutionContext *scope, String *name, bool createPro } -FunctionObject::Data::Data(ExecutionContext *scope, const QString &name, bool createProto) +Heap::FunctionObject::FunctionObject(QV4::ExecutionContext *scope, const QString &name, bool createProto) : Heap::Object(scope->d()->engine->functionClass) , scope(scope) { @@ -82,7 +82,7 @@ FunctionObject::Data::Data(ExecutionContext *scope, const QString &name, bool cr f->init(n.getPointer(), createProto); } -FunctionObject::Data::Data(ExecutionContext *scope, const ReturnedValue name) +Heap::FunctionObject::FunctionObject(QV4::ExecutionContext *scope, const ReturnedValue name) : Heap::Object(scope->d()->engine->functionClass) , scope(scope) { @@ -92,7 +92,7 @@ FunctionObject::Data::Data(ExecutionContext *scope, const ReturnedValue name) f->init(n.getPointer(), false); } -FunctionObject::Data::Data(InternalClass *ic) +Heap::FunctionObject::FunctionObject(InternalClass *ic) : Heap::Object(ic) , scope(ic->engine->rootContext) { @@ -103,7 +103,7 @@ FunctionObject::Data::Data(InternalClass *ic) } -FunctionObject::Data::~Data() +Heap::FunctionObject::~FunctionObject() { if (function) function->compilationUnit->release(); @@ -117,14 +117,14 @@ void FunctionObject::init(String *n, bool createProto) d()->needsActivation = true; d()->strictMode = false; - ensureMemberIndex(s.engine, Index_Prototype); + ensureMemberIndex(s.engine, Heap::FunctionObject::Index_Prototype); if (createProto) { Scoped<Object> proto(s, scope()->d()->engine->newObject(scope()->d()->engine->protoClass)); - proto->ensureMemberIndex(s.engine, Index_ProtoConstructor); - proto->memberData()->data()[Index_ProtoConstructor] = this->asReturnedValue(); - memberData()->data()[Index_Prototype] = proto.asReturnedValue(); + proto->ensureMemberIndex(s.engine, Heap::FunctionObject::Index_ProtoConstructor); + proto->memberData()->data()[Heap::FunctionObject::Index_ProtoConstructor] = this->asReturnedValue(); + memberData()->data()[Heap::FunctionObject::Index_Prototype] = proto.asReturnedValue(); } else { - memberData()->data()[Index_Prototype] = Encode::undefined(); + memberData()->data()[Heap::FunctionObject::Index_Prototype] = Encode::undefined(); } ScopedValue v(s, n); @@ -157,7 +157,7 @@ ReturnedValue FunctionObject::call(Managed *, CallData *) void FunctionObject::markObjects(Heap::Base *that, ExecutionEngine *e) { - FunctionObject::Data *o = static_cast<FunctionObject::Data *>(that); + Heap::FunctionObject *o = static_cast<Heap::FunctionObject *>(that); if (o->scope) o->scope->mark(e); @@ -176,10 +176,10 @@ Returned<FunctionObject> *FunctionObject::createScriptFunction(ExecutionContext DEFINE_OBJECT_VTABLE(FunctionCtor); -FunctionCtor::Data::Data(ExecutionContext *scope) - : FunctionObject::Data(scope, QStringLiteral("Function")) +Heap::FunctionCtor::FunctionCtor(QV4::ExecutionContext *scope) + : Heap::FunctionObject(scope, QStringLiteral("Function")) { - setVTable(staticVTable()); + setVTable(QV4::FunctionCtor::staticVTable()); } // 15.3.2 @@ -239,8 +239,8 @@ ReturnedValue FunctionCtor::call(Managed *that, CallData *callData) DEFINE_OBJECT_VTABLE(FunctionPrototype); -FunctionPrototype::Data::Data(InternalClass *ic) - : FunctionObject::Data(ic) +Heap::FunctionPrototype::FunctionPrototype(InternalClass *ic) + : Heap::FunctionObject(ic) { } @@ -348,10 +348,10 @@ ReturnedValue FunctionPrototype::method_bind(CallContext *ctx) DEFINE_OBJECT_VTABLE(ScriptFunction); -ScriptFunction::Data::Data(ExecutionContext *scope, Function *function) - : SimpleScriptFunction::Data(scope, function, true) +Heap::ScriptFunction::ScriptFunction(QV4::ExecutionContext *scope, Function *function) + : Heap::SimpleScriptFunction(scope, function, true) { - setVTable(staticVTable()); + setVTable(QV4::ScriptFunction::staticVTable()); } ReturnedValue ScriptFunction::construct(Managed *that, CallData *callData) @@ -409,10 +409,10 @@ ReturnedValue ScriptFunction::call(Managed *that, CallData *callData) DEFINE_OBJECT_VTABLE(SimpleScriptFunction); -SimpleScriptFunction::Data::Data(ExecutionContext *scope, Function *function, bool createProto) - : FunctionObject::Data(scope, function->name(), createProto) +Heap::SimpleScriptFunction::SimpleScriptFunction(QV4::ExecutionContext *scope, Function *function, bool createProto) + : Heap::FunctionObject(scope, function->name(), createProto) { - setVTable(staticVTable()); + setVTable(QV4::SimpleScriptFunction::staticVTable()); this->function = function; function->compilationUnit->addref(); @@ -531,11 +531,11 @@ InternalClass *SimpleScriptFunction::internalClassForConstructor() DEFINE_OBJECT_VTABLE(BuiltinFunction); -BuiltinFunction::Data::Data(ExecutionContext *scope, String *name, ReturnedValue (*code)(CallContext *)) - : FunctionObject::Data(scope, name) +Heap::BuiltinFunction::BuiltinFunction(QV4::ExecutionContext *scope, QV4::String *name, ReturnedValue (*code)(QV4::CallContext *)) + : Heap::FunctionObject(scope, name) , code(code) { - setVTable(staticVTable()); + setVTable(QV4::BuiltinFunction::staticVTable()); } ReturnedValue BuiltinFunction::construct(Managed *f, CallData *) @@ -585,13 +585,14 @@ DEFINE_OBJECT_VTABLE(IndexedBuiltinFunction); DEFINE_OBJECT_VTABLE(BoundFunction); -BoundFunction::Data::Data(ExecutionContext *scope, FunctionObject *target, const ValueRef boundThis, MemberData *boundArgs) - : FunctionObject::Data(scope, QStringLiteral("__bound function__")) +Heap::BoundFunction::BoundFunction(QV4::ExecutionContext *scope, QV4::FunctionObject *target, + const ValueRef boundThis, QV4::MemberData *boundArgs) + : Heap::FunctionObject(scope, QStringLiteral("__bound function__")) , target(target) , boundArgs(boundArgs ? boundArgs->d() : 0) { this->boundThis = boundThis; - setVTable(staticVTable()); + setVTable(QV4::BoundFunction::staticVTable()); subtype = FunctionObject::BoundFunction; Scope s(scope); diff --git a/src/qml/jsruntime/qv4functionobject_p.h b/src/qml/jsruntime/qv4functionobject_p.h index f19a3269cb..50c266313e 100644 --- a/src/qml/jsruntime/qv4functionobject_p.h +++ b/src/qml/jsruntime/qv4functionobject_p.h @@ -42,22 +42,9 @@ QT_BEGIN_NAMESPACE namespace QV4 { -struct Q_QML_EXPORT FunctionObject: Object { - struct Q_QML_PRIVATE_EXPORT Data : Heap::Object { - Data(ExecutionContext *scope, String *name, bool createProto = false); - Data(ExecutionContext *scope, const QString &name = QString(), bool createProto = false); - Data(ExecutionContext *scope, const ReturnedValue name); - Data(InternalClass *ic); - ~Data(); - - ExecutionContext *scope; - Function *function; - }; - V4_OBJECT(Object) - Q_MANAGED_TYPE(FunctionObject) - enum { - IsFunctionObject = true - }; +namespace Heap { + +struct Q_QML_PRIVATE_EXPORT FunctionObject : Object { // Used with Managed::subType enum FunctionType { RegularFunction = 0, @@ -70,6 +57,58 @@ struct Q_QML_EXPORT FunctionObject: Object { Index_ProtoConstructor = 0 }; + FunctionObject(QV4::ExecutionContext *scope, QV4::String *name, bool createProto = false); + FunctionObject(QV4::ExecutionContext *scope, const QString &name = QString(), bool createProto = false); + FunctionObject(QV4::ExecutionContext *scope, const ReturnedValue name); + FunctionObject(InternalClass *ic); + ~FunctionObject(); + + QV4::ExecutionContext *scope; + Function *function; +}; + +struct FunctionCtor : FunctionObject { + FunctionCtor(QV4::ExecutionContext *scope); +}; + +struct FunctionPrototype : FunctionObject { + FunctionPrototype(InternalClass *ic); +}; + +struct Q_QML_EXPORT BuiltinFunction : FunctionObject { + BuiltinFunction(QV4::ExecutionContext *scope, QV4::String *name, ReturnedValue (*code)(QV4::CallContext *)); + ReturnedValue (*code)(QV4::CallContext *); +}; + +struct IndexedBuiltinFunction : FunctionObject { + inline IndexedBuiltinFunction(QV4::ExecutionContext *scope, uint index, ReturnedValue (*code)(QV4::CallContext *ctx, uint index)); + ReturnedValue (*code)(QV4::CallContext *, uint index); + uint index; +}; + +struct SimpleScriptFunction : FunctionObject { + SimpleScriptFunction(QV4::ExecutionContext *scope, Function *function, bool createProto); +}; + +struct ScriptFunction : SimpleScriptFunction { + ScriptFunction(QV4::ExecutionContext *scope, Function *function); +}; + +struct BoundFunction : FunctionObject { + BoundFunction(QV4::ExecutionContext *scope, QV4::FunctionObject *target, const ValueRef boundThis, QV4::MemberData *boundArgs); + QV4::FunctionObject *target; + Value boundThis; + MemberData *boundArgs; +}; + +} + +struct Q_QML_EXPORT FunctionObject: Object { + enum { + IsFunctionObject = true + }; + V4_OBJECT2(FunctionObject, Object) + Q_MANAGED_TYPE(FunctionObject) ExecutionContext *scope() { return d()->scope; } Function *function() { return d()->function; } @@ -96,7 +135,7 @@ struct Q_QML_EXPORT FunctionObject: Object { static Returned<FunctionObject> *createScriptFunction(ExecutionContext *scope, Function *function, bool createProto = true); - ReturnedValue protoProperty() { return memberData()->data()[Index_Prototype].asReturnedValue(); } + ReturnedValue protoProperty() { return memberData()->data()[Heap::FunctionObject::Index_Prototype].asReturnedValue(); } bool needsActivation() const { return d()->needsActivation; } bool strictMode() const { return d()->strictMode; } @@ -112,11 +151,7 @@ inline FunctionObject *value_cast(const Value &v) { struct FunctionCtor: FunctionObject { - struct Data : FunctionObject::Data { - Data(ExecutionContext *scope); - }; - - V4_OBJECT(FunctionObject) + V4_OBJECT2(FunctionCtor, FunctionObject) static ReturnedValue construct(Managed *that, CallData *callData); static ReturnedValue call(Managed *that, CallData *callData); @@ -124,10 +159,7 @@ struct FunctionCtor: FunctionObject struct FunctionPrototype: FunctionObject { - struct Data : FunctionObject::Data { - Data(InternalClass *ic); - }; - V4_OBJECT(FunctionObject) + V4_OBJECT2(FunctionPrototype, FunctionObject) void init(ExecutionEngine *engine, Object *ctor); @@ -138,11 +170,7 @@ struct FunctionPrototype: FunctionObject }; struct Q_QML_EXPORT BuiltinFunction: FunctionObject { - struct Q_QML_EXPORT Data : FunctionObject::Data { - Data(ExecutionContext *scope, String *name, ReturnedValue (*code)(CallContext *)); - ReturnedValue (*code)(CallContext *); - }; - V4_OBJECT(FunctionObject) + V4_OBJECT2(BuiltinFunction, FunctionObject) static Returned<BuiltinFunction> *create(ExecutionContext *scope, String *name, ReturnedValue (*code)(CallContext *)) { @@ -155,18 +183,7 @@ struct Q_QML_EXPORT BuiltinFunction: FunctionObject { struct IndexedBuiltinFunction: FunctionObject { - struct Data : FunctionObject::Data { - Data(ExecutionContext *scope, uint index, ReturnedValue (*code)(CallContext *ctx, uint index)) - : FunctionObject::Data(scope), - code(code) - , index(index) - { - setVTable(staticVTable()); - } - ReturnedValue (*code)(CallContext *, uint index); - uint index; - }; - V4_OBJECT(FunctionObject) + V4_OBJECT2(IndexedBuiltinFunction, FunctionObject) static ReturnedValue construct(Managed *m, CallData *) { @@ -176,12 +193,18 @@ struct IndexedBuiltinFunction: FunctionObject static ReturnedValue call(Managed *that, CallData *callData); }; +Heap::IndexedBuiltinFunction::IndexedBuiltinFunction(QV4::ExecutionContext *scope, uint index, + ReturnedValue (*code)(QV4::CallContext *ctx, uint index)) + : Heap::FunctionObject(scope), + code(code) + , index(index) +{ + setVTable(QV4::IndexedBuiltinFunction::staticVTable()); +} + struct SimpleScriptFunction: FunctionObject { - struct Data : FunctionObject::Data { - Data(ExecutionContext *scope, Function *function, bool createProto); - }; - V4_OBJECT(FunctionObject) + V4_OBJECT2(SimpleScriptFunction, FunctionObject) static ReturnedValue construct(Managed *, CallData *callData); static ReturnedValue call(Managed *that, CallData *callData); @@ -190,10 +213,7 @@ struct SimpleScriptFunction: FunctionObject { }; struct ScriptFunction: SimpleScriptFunction { - struct Data : SimpleScriptFunction::Data { - Data(ExecutionContext *scope, Function *function); - }; - V4_OBJECT(FunctionObject) + V4_OBJECT2(ScriptFunction, FunctionObject) static ReturnedValue construct(Managed *, CallData *callData); static ReturnedValue call(Managed *that, CallData *callData); @@ -201,13 +221,7 @@ struct ScriptFunction: SimpleScriptFunction { struct BoundFunction: FunctionObject { - struct Data : FunctionObject::Data { - Data(ExecutionContext *scope, FunctionObject *target, const ValueRef boundThis, MemberData *boundArgs); - FunctionObject *target; - Value boundThis; - Heap::MemberData *boundArgs; - }; - V4_OBJECT(FunctionObject) + V4_OBJECT2(BoundFunction, FunctionObject) static Returned<BoundFunction> *create(ExecutionContext *scope, FunctionObject *target, const ValueRef boundThis, QV4::MemberData *boundArgs) { diff --git a/src/qml/jsruntime/qv4globalobject.cpp b/src/qml/jsruntime/qv4globalobject.cpp index bc97e17a83..8424fd6935 100644 --- a/src/qml/jsruntime/qv4globalobject.cpp +++ b/src/qml/jsruntime/qv4globalobject.cpp @@ -339,7 +339,7 @@ static QString decode(const QString &input, DecodeMode decodeMode, bool *ok) DEFINE_OBJECT_VTABLE(EvalFunction); EvalFunction::Data::Data(ExecutionContext *scope) - : FunctionObject::Data(scope, scope->d()->engine->id_eval) + : Heap::FunctionObject(scope, scope->d()->engine->id_eval) { setVTable(staticVTable()); Scope s(scope); diff --git a/src/qml/jsruntime/qv4globalobject_p.h b/src/qml/jsruntime/qv4globalobject_p.h index 352519ceaf..b14364b127 100644 --- a/src/qml/jsruntime/qv4globalobject_p.h +++ b/src/qml/jsruntime/qv4globalobject_p.h @@ -42,7 +42,7 @@ namespace QV4 { struct Q_QML_EXPORT EvalFunction : FunctionObject { - struct Data : FunctionObject::Data { + struct Data : Heap::FunctionObject { Data(ExecutionContext *scope); }; diff --git a/src/qml/jsruntime/qv4numberobject.cpp b/src/qml/jsruntime/qv4numberobject.cpp index 44826c94c8..f4d0c47a1c 100644 --- a/src/qml/jsruntime/qv4numberobject.cpp +++ b/src/qml/jsruntime/qv4numberobject.cpp @@ -46,7 +46,7 @@ DEFINE_OBJECT_VTABLE(NumberCtor); DEFINE_OBJECT_VTABLE(NumberObject); NumberCtor::Data::Data(ExecutionContext *scope) - : FunctionObject::Data(scope, QStringLiteral("Number")) + : Heap::FunctionObject(scope, QStringLiteral("Number")) { setVTable(staticVTable()); } diff --git a/src/qml/jsruntime/qv4numberobject_p.h b/src/qml/jsruntime/qv4numberobject_p.h index 9edaf09749..ad3fe328ef 100644 --- a/src/qml/jsruntime/qv4numberobject_p.h +++ b/src/qml/jsruntime/qv4numberobject_p.h @@ -43,7 +43,7 @@ namespace QV4 { struct NumberCtor: FunctionObject { - struct Data : FunctionObject::Data { + struct Data : Heap::FunctionObject { Data(ExecutionContext *scope); }; V4_OBJECT(FunctionObject) diff --git a/src/qml/jsruntime/qv4objectproto.cpp b/src/qml/jsruntime/qv4objectproto.cpp index 5a4fe253e2..f8e6329d85 100644 --- a/src/qml/jsruntime/qv4objectproto.cpp +++ b/src/qml/jsruntime/qv4objectproto.cpp @@ -50,7 +50,7 @@ using namespace QV4; DEFINE_OBJECT_VTABLE(ObjectCtor); ObjectCtor::Data::Data(ExecutionContext *scope) - : FunctionObject::Data(scope, QStringLiteral("Object")) + : Heap::FunctionObject(scope, QStringLiteral("Object")) { setVTable(staticVTable()); } diff --git a/src/qml/jsruntime/qv4objectproto_p.h b/src/qml/jsruntime/qv4objectproto_p.h index 0a5bacbadb..f257d376db 100644 --- a/src/qml/jsruntime/qv4objectproto_p.h +++ b/src/qml/jsruntime/qv4objectproto_p.h @@ -43,7 +43,7 @@ namespace QV4 { struct ObjectCtor: FunctionObject { - struct Data : FunctionObject::Data { + struct Data : Heap::FunctionObject { Data(ExecutionContext *scope); }; V4_OBJECT(FunctionObject) diff --git a/src/qml/jsruntime/qv4qobjectwrapper.cpp b/src/qml/jsruntime/qv4qobjectwrapper.cpp index 480d1231e8..e6f014d05d 100644 --- a/src/qml/jsruntime/qv4qobjectwrapper.cpp +++ b/src/qml/jsruntime/qv4qobjectwrapper.cpp @@ -1755,7 +1755,7 @@ ReturnedValue QObjectMethod::create(ExecutionContext *scope, QObject *object, in } QObjectMethod::Data::Data(ExecutionContext *scope, QObject *object, int index, const ValueRef qmlGlobal) - : FunctionObject::Data(scope) + : Heap::FunctionObject(scope) , object(object) , index(index) , qmlGlobal(qmlGlobal) diff --git a/src/qml/jsruntime/qv4qobjectwrapper_p.h b/src/qml/jsruntime/qv4qobjectwrapper_p.h index f65afabfbf..0de3450388 100644 --- a/src/qml/jsruntime/qv4qobjectwrapper_p.h +++ b/src/qml/jsruntime/qv4qobjectwrapper_p.h @@ -117,7 +117,7 @@ private: struct Q_QML_EXPORT QObjectMethod : public QV4::FunctionObject { - struct Data : QV4::FunctionObject::Data { + struct Data : QV4::Heap::FunctionObject { Data(QV4::ExecutionContext *scope, QObject *object, int index, const ValueRef qmlGlobal); QPointer<QObject> object; int index; diff --git a/src/qml/jsruntime/qv4regexpobject.cpp b/src/qml/jsruntime/qv4regexpobject.cpp index ca28a902fd..5c729656ef 100644 --- a/src/qml/jsruntime/qv4regexpobject.cpp +++ b/src/qml/jsruntime/qv4regexpobject.cpp @@ -230,7 +230,7 @@ uint RegExpObject::flags() const DEFINE_OBJECT_VTABLE(RegExpCtor); RegExpCtor::Data::Data(ExecutionContext *scope) - : FunctionObject::Data(scope, QStringLiteral("RegExp")) + : Heap::FunctionObject(scope, QStringLiteral("RegExp")) { setVTable(staticVTable()); clearLastMatch(); diff --git a/src/qml/jsruntime/qv4regexpobject_p.h b/src/qml/jsruntime/qv4regexpobject_p.h index 481bd58bcd..42e6494199 100644 --- a/src/qml/jsruntime/qv4regexpobject_p.h +++ b/src/qml/jsruntime/qv4regexpobject_p.h @@ -96,7 +96,7 @@ protected: struct RegExpCtor: FunctionObject { - struct Data : FunctionObject::Data { + struct Data : Heap::FunctionObject { Data(ExecutionContext *scope); Value lastMatch; StringValue lastInput; diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp index c73d93bc9b..f76e9651a5 100644 --- a/src/qml/jsruntime/qv4runtime.cpp +++ b/src/qml/jsruntime/qv4runtime.cpp @@ -302,7 +302,7 @@ QV4::ReturnedValue Runtime::instanceof(ExecutionContext *ctx, const ValueRef lef if (!f) return ctx->engine()->throwTypeError(); - if (f->subtype() == FunctionObject::BoundFunction) + if (f->subtype() == Heap::FunctionObject::BoundFunction) f = static_cast<BoundFunction *>(f)->target(); Object *v = left->asObject(); diff --git a/src/qml/jsruntime/qv4script.cpp b/src/qml/jsruntime/qv4script.cpp index da6503c1ab..69304e5060 100644 --- a/src/qml/jsruntime/qv4script.cpp +++ b/src/qml/jsruntime/qv4script.cpp @@ -54,7 +54,7 @@ using namespace QV4; QmlBindingWrapper::Data::Data(ExecutionContext *scope, Function *f, QV4::Object *qml) - : FunctionObject::Data(scope, scope->d()->engine->id_eval, /*createProto = */ false) + : Heap::FunctionObject(scope, scope->d()->engine->id_eval, /*createProto = */ false) , qml(qml) { Q_ASSERT(scope->inUse()); @@ -75,7 +75,7 @@ QmlBindingWrapper::Data::Data(ExecutionContext *scope, Function *f, QV4::Object } QmlBindingWrapper::Data::Data(ExecutionContext *scope, QV4::Object *qml) - : FunctionObject::Data(scope, scope->d()->engine->id_eval, /*createProto = */ false) + : Heap::FunctionObject(scope, scope->d()->engine->id_eval, /*createProto = */ false) , qml(qml) { Q_ASSERT(scope->inUse()); diff --git a/src/qml/jsruntime/qv4script_p.h b/src/qml/jsruntime/qv4script_p.h index 26a08f63e8..337354b38b 100644 --- a/src/qml/jsruntime/qv4script_p.h +++ b/src/qml/jsruntime/qv4script_p.h @@ -72,7 +72,7 @@ struct ContextStateSaver { }; struct Q_QML_EXPORT QmlBindingWrapper : FunctionObject { - struct Data : FunctionObject::Data { + struct Data : Heap::FunctionObject { Data(ExecutionContext *scope, Function *f, QV4::Object *qml); // Constructor for QML functions and signal handlers, resulting binding wrapper is not callable! Data(ExecutionContext *scope, QV4::Object *qml); diff --git a/src/qml/jsruntime/qv4stringobject.cpp b/src/qml/jsruntime/qv4stringobject.cpp index e48e3b6d4c..0c2261dca0 100644 --- a/src/qml/jsruntime/qv4stringobject.cpp +++ b/src/qml/jsruntime/qv4stringobject.cpp @@ -160,7 +160,7 @@ void StringObject::markObjects(Heap::Base *that, ExecutionEngine *e) DEFINE_OBJECT_VTABLE(StringCtor); StringCtor::Data::Data(ExecutionContext *scope) - : FunctionObject::Data(scope, QStringLiteral("String")) + : Heap::FunctionObject(scope, QStringLiteral("String")) { setVTable(staticVTable()); } diff --git a/src/qml/jsruntime/qv4stringobject_p.h b/src/qml/jsruntime/qv4stringobject_p.h index 332c4c86cc..5e5d28bf4c 100644 --- a/src/qml/jsruntime/qv4stringobject_p.h +++ b/src/qml/jsruntime/qv4stringobject_p.h @@ -64,7 +64,7 @@ protected: struct StringCtor: FunctionObject { - struct Data : FunctionObject::Data { + struct Data : Heap::FunctionObject { Data(ExecutionContext *scope); }; V4_OBJECT(FunctionObject) diff --git a/src/qml/jsruntime/qv4typedarray.cpp b/src/qml/jsruntime/qv4typedarray.cpp index 7710bd6b26..d4b51c7214 100644 --- a/src/qml/jsruntime/qv4typedarray.cpp +++ b/src/qml/jsruntime/qv4typedarray.cpp @@ -194,7 +194,7 @@ const TypedArrayOperations operations[TypedArray::NTypes] = { TypedArrayCtor::Data::Data(ExecutionContext *scope, TypedArray::Type t) - : FunctionObject::Data(scope, QLatin1String(operations[t].name)) + : Heap::FunctionObject(scope, QLatin1String(operations[t].name)) , type(t) { setVTable(staticVTable()); diff --git a/src/qml/jsruntime/qv4typedarray_p.h b/src/qml/jsruntime/qv4typedarray_p.h index 8294659fe1..20a7827bf2 100644 --- a/src/qml/jsruntime/qv4typedarray_p.h +++ b/src/qml/jsruntime/qv4typedarray_p.h @@ -89,7 +89,7 @@ struct TypedArray : Object struct TypedArrayCtor: FunctionObject { - struct Data : FunctionObject::Data { + struct Data : Heap::FunctionObject { Data(ExecutionContext *scope, TypedArray::Type t); TypedArray::Type type; diff --git a/src/qml/qml/qqmlxmlhttprequest.cpp b/src/qml/qml/qqmlxmlhttprequest.cpp index 587a58c313..b6727dc41a 100644 --- a/src/qml/qml/qqmlxmlhttprequest.cpp +++ b/src/qml/qml/qqmlxmlhttprequest.cpp @@ -1618,9 +1618,9 @@ DEFINE_OBJECT_VTABLE(QQmlXMLHttpRequestWrapper); struct QQmlXMLHttpRequestCtor : public FunctionObject { - struct Data : FunctionObject::Data { + struct Data : Heap::FunctionObject { Data(ExecutionEngine *engine) - : FunctionObject::Data(engine->rootContext, QStringLiteral("XMLHttpRequest")) + : Heap::FunctionObject(engine->rootContext, QStringLiteral("XMLHttpRequest")) { setVTable(staticVTable()); Scope scope(engine); diff --git a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp index 61fe2a4876..fa076073d8 100644 --- a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp +++ b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp @@ -1166,8 +1166,8 @@ ReturnedValue QtObject::method_locale(CallContext *ctx) return QQmlLocale::locale(v8engine, code); } -QQmlBindingFunction::Data::Data(FunctionObject *originalFunction) - : QV4::FunctionObject::Data(originalFunction->scope(), originalFunction->name()) +QQmlBindingFunction::Data::Data(QV4::FunctionObject *originalFunction) + : QV4::Heap::FunctionObject(originalFunction->scope(), originalFunction->name()) , originalFunction(originalFunction) { setVTable(staticVTable()); diff --git a/src/qml/qml/v8/qqmlbuiltinfunctions_p.h b/src/qml/qml/v8/qqmlbuiltinfunctions_p.h index a21ae0afd3..696cf04397 100644 --- a/src/qml/qml/v8/qqmlbuiltinfunctions_p.h +++ b/src/qml/qml/v8/qqmlbuiltinfunctions_p.h @@ -143,8 +143,8 @@ struct GlobalExtensions { struct QQmlBindingFunction : public QV4::FunctionObject { - struct Data : FunctionObject::Data { - Data(FunctionObject *originalFunction); + struct Data : Heap::FunctionObject { + Data(QV4::FunctionObject *originalFunction); QV4::FunctionObject *originalFunction; // Set when the binding is created later QQmlSourceLocation bindingLocation; diff --git a/src/qml/types/qqmldelegatemodel.cpp b/src/qml/types/qqmldelegatemodel.cpp index 22d89f31c0..095112094e 100644 --- a/src/qml/types/qqmldelegatemodel.cpp +++ b/src/qml/types/qqmldelegatemodel.cpp @@ -54,9 +54,9 @@ class QQmlDelegateModelItem; struct DelegateModelGroupFunction: QV4::FunctionObject { - struct Data : FunctionObject::Data { + struct Data : QV4::Heap::FunctionObject { Data(QV4::ExecutionContext *scope, uint flag, QV4::ReturnedValue (*code)(QQmlDelegateModelItem *item, uint flag, const QV4::ValueRef arg)) - : FunctionObject::Data(scope, QStringLiteral("DelegateModelGroupFunction")) + : QV4::Heap::FunctionObject(scope, QStringLiteral("DelegateModelGroupFunction")) , flag(flag) , code(code) { diff --git a/tools/qmljs/qmljs.cpp b/tools/qmljs/qmljs.cpp index c381d702e1..2e4db65f94 100644 --- a/tools/qmljs/qmljs.cpp +++ b/tools/qmljs/qmljs.cpp @@ -64,9 +64,9 @@ using namespace QV4; struct Print: FunctionObject { - struct Data : FunctionObject::Data { + struct Data : Heap::FunctionObject { Data(ExecutionContext *scope) - : FunctionObject::Data(scope, QStringLiteral("print")) { + : Heap::FunctionObject(scope, QStringLiteral("print")) { setVTable(staticVTable()); } }; @@ -89,9 +89,9 @@ DEFINE_OBJECT_VTABLE(Print); struct GC: public FunctionObject { - struct Data : FunctionObject::Data { + struct Data : Heap::FunctionObject { Data(ExecutionContext *scope) - : FunctionObject::Data(scope, QStringLiteral("gc")) + : Heap::FunctionObject(scope, QStringLiteral("gc")) { setVTable(staticVTable()); } |