Add support for associating external resources with garbage collected JS objects
authorSimon Hausmann <simon.hausmann@digia.com>
Tue, 5 Mar 2013 12:12:37 +0000 (13:12 +0100)
committerLars Knoll <lars.knoll@digia.com>
Tue, 5 Mar 2013 15:32:14 +0000 (16:32 +0100)
Change-Id: Ib09096b684997ac77902e3cc50458092e2f569a2
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
src/v4/qv4object.cpp
src/v4/qv4object.h

index 97bdcc0..8c96e23 100644 (file)
@@ -71,6 +71,7 @@ Object::Object(ExecutionEngine *engine)
     , internalClass(engine->emptyClass)
     , memberDataAlloc(0), memberData(0)
     , arrayOffset(0), arrayDataLen(0), arrayAlloc(0), arrayData(0), sparseArray(0)
+    , externalResource(0)
 {
     vtbl = &static_vtbl;
     type = Type_Object;
@@ -79,6 +80,7 @@ Object::Object(ExecutionEngine *engine)
 
 Object::~Object()
 {
+    delete externalResource;
     delete [] memberData;
     delete [] (arrayData - (sparseArray ? 0 : arrayOffset));
     delete sparseArray;
index 62283bc..93fe8bf 100644 (file)
@@ -102,6 +102,12 @@ struct URIErrorPrototype;
 
 
 struct Q_V4_EXPORT Object: Managed {
+
+    class ExternalResource {
+    public:
+        virtual ~ExternalResource() {}
+    };
+
     Object *prototype;
     InternalClass *internalClass;
     uint memberDataAlloc;
@@ -115,6 +121,7 @@ struct Q_V4_EXPORT Object: Managed {
     uint arrayAlloc;
     PropertyDescriptor *arrayData;
     SparseArray *sparseArray;
+    ExternalResource *externalResource;
 
     Object(ExecutionEngine *engine);
     ~Object();