Save some memory
authorLars Knoll <lars.knoll@digia.com>
Wed, 2 Jan 2013 21:35:18 +0000 (22:35 +0100)
committerSimon Hausmann <simon.hausmann@digia.com>
Thu, 3 Jan 2013 11:21:40 +0000 (12:21 +0100)
Move some boolean flags from Object and FunctionObject
into the Managed class and reduce the size of these
Objects.

Change-Id: Iee9ab09407ec44b447f9597a9b1d55e9092e7ad5
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
qmljs_objects.h
qv4managed.h

index 0e62b63..61fee48 100644 (file)
@@ -398,11 +398,9 @@ private:
 struct Object: Managed {
     Object *prototype;
     QScopedPointer<PropertyTable> members;
-    bool extensible;
 
     Object()
-        : prototype(0)
-        , extensible(true) {}
+        : prototype(0) {}
 
     virtual ~Object();
 
@@ -538,23 +536,20 @@ struct FunctionObject: Object {
     ExecutionContext *scope;
     String *name;
     String **formalParameterList;
-    unsigned int formalParameterCount;
     String **varList;
+    unsigned int formalParameterCount;
     unsigned int varCount;
-    bool needsActivation;
-    bool usesArgumentsObject;
-    bool strictMode;
 
     FunctionObject(ExecutionContext *scope)
         : scope(scope)
         , name(0)
         , formalParameterList(0)
-        , formalParameterCount(0)
         , varList(0)
+        , formalParameterCount(0)
         , varCount(0)
-        , needsActivation(false)
-        , usesArgumentsObject(false)
-        , strictMode(false) {}
+        { needsActivation = false;
+          usesArgumentsObject = false;
+          strictMode = false; }
 
     virtual QString className() { return QStringLiteral("Function"); }
     virtual FunctionObject *asFunctionObject() { return this; }
index 584b9d7..22138b9 100644 (file)
@@ -61,7 +61,7 @@ private:
     void operator = (const Managed &other);
 
 protected:
-    Managed() : markBit(0), inUse(1), unused(0) { }
+    Managed() : markBit(0), inUse(1), extensible(true), unused(0) { }
     virtual ~Managed();
 
 public:
@@ -79,10 +79,14 @@ private:
         struct {
             quintptr markBit :  1;
             quintptr inUse   :  1;
+            quintptr extensible : 1; // used by Object
+            quintptr needsActivation : 1; // used by FunctionObject
+            quintptr usesArgumentsObject : 1; // used by FunctionObject
+            quintptr strictMode : 1; // used by FunctionObject
 #if CPU(X86_64)
-            quintptr unused  : 62;
+            quintptr unused  : 58;
 #elif CPU(X86)
-            quintptr unused  : 30;
+            quintptr unused  : 26;
 #else
 #error "implement me"
 #endif