Convert ArgumentsObject over to the new storage scheme
authorLars Knoll <lars.knoll@digia.com>
Tue, 29 Apr 2014 08:53:47 +0000 (10:53 +0200)
committerSimon Hausmann <simon.hausmann@digia.com>
Tue, 22 Jul 2014 11:49:00 +0000 (13:49 +0200)
Change-Id: I087e51cef255c025dfabe416ba459cc51a889153
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
src/qml/jsruntime/qv4argumentsobject.cpp
src/qml/jsruntime/qv4argumentsobject_p.h

index 48b9822..092d151 100644 (file)
@@ -49,8 +49,8 @@ DEFINE_OBJECT_VTABLE(ArgumentsObject);
 ArgumentsObject::ArgumentsObject(CallContext *context)
     : Object(context->strictMode ? context->engine->strictArgumentsObjectClass : context->engine->argumentsObjectClass)
 {
-    data.context = context;
-    data.fullyCreated = false;
+    d()->context = context;
+    d()->fullyCreated = false;
 
     ExecutionEngine *v4 = context->engine;
     Scope scope(v4);
@@ -68,7 +68,7 @@ ArgumentsObject::ArgumentsObject(CallContext *context)
 
         arrayReserve(context->callData->argc);
         arrayPut(0, context->callData->args, context->callData->argc);
-        data.fullyCreated = true;
+        d()->fullyCreated = true;
     } else {
         setHasAccessorProperty();
         Q_ASSERT(CalleePropertyIndex == internalClass()->find(context->engine->id_callee));
@@ -98,7 +98,7 @@ void ArgumentsObject::fullyCreate()
     for (uint i = numAccessors; i < argCount; ++i)
         setArrayAttributes(i, Attr_Data);
 
-    data.fullyCreated = true;
+    d()->fullyCreated = true;
 }
 
 bool ArgumentsObject::defineOwnProperty(ExecutionContext *ctx, uint index, const Property &desc, PropertyAttributes attrs)
index 6095561..f3bd290 100644 (file)
@@ -50,18 +50,20 @@ namespace QV4 {
 
 struct ArgumentsGetterFunction: FunctionObject
 {
-    V4_OBJECT
-    struct Data {
+    struct Data : FunctionObject::Data {
         uint index;
     };
-    Data data;
+    struct {
+        uint index;
+    } __data;
+    V4_OBJECT_NEW
 
-    uint index() const { return data.index; }
+    uint index() const { return d()->index; }
 
     ArgumentsGetterFunction(ExecutionContext *scope, uint index)
         : FunctionObject(scope)
     {
-        data.index = index;
+        d()->index = index;
         setVTable(staticVTable());
     }
 
@@ -70,18 +72,20 @@ struct ArgumentsGetterFunction: FunctionObject
 
 struct ArgumentsSetterFunction: FunctionObject
 {
-    V4_OBJECT
-    struct Data {
+    struct Data : FunctionObject::Data {
         uint index;
     };
-    Data data;
+    struct {
+        uint index;
+    } __data;
+    V4_OBJECT_NEW
 
-    uint index() const { return data.index; }
+    uint index() const { return d()->index; }
 
     ArgumentsSetterFunction(ExecutionContext *scope, uint index)
         : FunctionObject(scope)
     {
-        data.index = index;
+        d()->index = index;
         setVTable(staticVTable());
     }
 
@@ -90,18 +94,22 @@ struct ArgumentsSetterFunction: FunctionObject
 
 
 struct ArgumentsObject: Object {
-    V4_OBJECT
-    Q_MANAGED_TYPE(ArgumentsObject)
-    struct Data {
+    struct Data : Object::Data {
         CallContext *context;
         bool fullyCreated;
         Members mappedArguments;
     };
-    Data data;
+    struct {
+        CallContext *context;
+        bool fullyCreated;
+        Members mappedArguments;
+    } __data;
+    V4_OBJECT_NEW
+    Q_MANAGED_TYPE(ArgumentsObject)
 
-    CallContext *context() const { return data.context; }
-    bool fullyCreated() const { return data.fullyCreated; }
-    Members mappedArguments() const { return data.mappedArguments; }
+    CallContext *context() const { return d()->context; }
+    bool fullyCreated() const { return d()->fullyCreated; }
+    Members &mappedArguments() { return d()->mappedArguments; }
 
     ArgumentsObject(CallContext *context);