From 002fdc48d43e4fd67921e0cd46c28d28aee06848 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Thu, 2 Nov 2017 16:02:10 +0100 Subject: Bring back markObjects(), this time generated Doing the marking of objects in a function instead of using the table seems to be somewhat faster. Change-Id: I9ec00cc0264f9a15c69b285db493bee31d99bf96 Reviewed-by: Erik Verbruggen --- src/qml/jsruntime/qv4object_p.h | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'src/qml/jsruntime/qv4object_p.h') diff --git a/src/qml/jsruntime/qv4object_p.h b/src/qml/jsruntime/qv4object_p.h index cfec387f44..6e7d002a1b 100644 --- a/src/qml/jsruntime/qv4object_p.h +++ b/src/qml/jsruntime/qv4object_p.h @@ -72,10 +72,9 @@ namespace Heap { Member(class, Pointer, MemberData *, memberData) \ Member(class, Pointer, ArrayData *, arrayData) -DECLARE_HEAP_OBJECT(Object, Base) { - DECLARE_MARK_TABLE(Object); +DECLARE_EXPORTED_HEAP_OBJECT(Object, Base) { + static void markObjects(Heap::Base *base, MarkStack *stack); void init() { Base::init(); } - void destroy() { Base::destroy(); } const Value *inlinePropertyData(uint index) const { Q_ASSERT(index < vtable()->nInlineProperties); @@ -129,8 +128,6 @@ DECLARE_HEAP_OBJECT(Object, Base) { Heap::Object *prototype() const { return internalClass->prototype; } }; -Q_STATIC_ASSERT(Object::markTable == ((2 << 2) | (2 << 4))); - } #define V4_OBJECT2(DataClass, superClass) \ @@ -150,8 +147,7 @@ Q_STATIC_ASSERT(Object::markTable == ((2 << 2) | (2 << 4))); dptr->_checkIsInitialized(); \ return dptr; \ } \ - V4_ASSERT_IS_TRIVIAL(QV4::Heap::DataClass); \ - static Q_CONSTEXPR quint64 markTable = QV4::Heap::DataClass::markTable; + V4_ASSERT_IS_TRIVIAL(QV4::Heap::DataClass); #define V4_PROTOTYPE(p) \ static QV4::Object *defaultPrototype(QV4::ExecutionEngine *e) \ @@ -308,6 +304,8 @@ struct Q_QML_EXPORT Object: Managed { // Array handling public: + static void markObjects(Heap::Base *base, MarkStack *stack); + void copyArrayData(Object *other); bool setArrayLength(uint newLen); @@ -436,7 +434,6 @@ protected: static void advanceIterator(Managed *m, ObjectIterator *it, Value *name, uint *index, Property *p, PropertyAttributes *attributes); static uint getLength(const Managed *m); static ReturnedValue instanceOf(const Object *typeObject, const Value &var); - static void markObjects(Heap::Base *, MarkStack *); private: ReturnedValue internalGet(String *name, bool *hasProperty) const; -- cgit v1.2.3