Document the vTable hack.
authorThomas McGuire <thomas.mcguire.qnx@kdab.com>
Wed, 15 Aug 2012 07:33:18 +0000 (09:33 +0200)
committerQt by Nokia <qt-info@nokia.com>
Fri, 24 Aug 2012 09:28:51 +0000 (11:28 +0200)
This was not immediately obvious, so better document this clever trick.

Change-Id: I0d4a06396b9a709b29b46726d9a65d53600e3fa2
Reviewed-by: Chris Adams <christopher.adams@nokia.com>
src/qml/qml/qqmlabstractbinding_p.h

index 1ce0a23..a49b591 100644 (file)
@@ -162,6 +162,14 @@ private:
     inline QQmlAbstractBinding *nextBinding() const;
     inline void setNextBinding(QQmlAbstractBinding *);
 
+    // Pointer to the next binding in the linked list of bindings.
+    // Being a pointer, the address is always aligned to at least 4 bytes, which means the last two
+    // bits of the pointer are free to be used for something else. They are used to store the binding
+    // type. The binding type serves as an index into the static vTables array, which is used instead
+    // of a compiler-generated vTable. Instead of virtual functions, pointers to static functions in
+    // the vTables array are used for dispatching.
+    // This saves a compiler-generated pointer to a compiler-generated vTable, and thus reduces
+    // the binding object size by sizeof(void*).
     uintptr_t m_nextBindingPtr;
 
     static VTable *vTables[];