Reviewed by Geoff.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 29 Mar 2006 00:09:20 +0000 (00:09 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 29 Mar 2006 00:09:20 +0000 (00:09 +0000)
        - change some code that resulted in init routines on Mac OS X -- if the framework has
          init routines it will use memory and slow down applications that link with WebKit
          even in cases where those applications don't use WebKit

        * kjs/date_object.cpp: Changed constants that were derived by multiplying other constants
        to use immediate numbers instead. Apparently, double constant expressions of the type we
        had here are evaluated at load time.

        * kjs/list.cpp: Can't use OwnArrayPtr in ListImp because of the global instances of
        ListImp, so go back to using a plain old pointer.
        (KJS::List::List): Set overflow to 0 when initializing ListImp.
        (KJS::List::release): Replace a clear call with a delete and explicit set to 0.
        (KJS::List::append): Use raw pointers, and do a delete [] instead of finessing it with
        a swap of OwnArrayPtr.
        (KJS::List::copyFrom): Remove now-unneeded get().
        (KJS::List::copyTail): Ditto.

        * kjs/ustring.cpp: Changed UString::Rep::empty initializer a bit so that it doesn't get
        a static initializer routine. Had to get rid of one level of constant to get the compiler
        to understand it could initialize without any code.

        - added a build step that checks for init routines

        * JavaScriptCore.xcodeproj/project.pbxproj: Deleted now-unused custom build rule that
        was replaced by the generate-derived-sources script a while back. Added a custom build
        phase that invokes the check-for-global-initializers script.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@13541 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
JavaScriptCore/kjs/date_object.cpp
JavaScriptCore/kjs/list.cpp
JavaScriptCore/kjs/ustring.cpp

index 720741e07eef9f5966112e042b68f75882c2d139..b48dcc735a8bbc7b841a6a535768498f3c76018f 100644 (file)
@@ -1,3 +1,34 @@
+2006-03-28  Darin Adler  <darin@apple.com>
+
+        Reviewed by Geoff.
+
+        - change some code that resulted in init routines on Mac OS X -- if the framework has
+          init routines it will use memory and slow down applications that link with WebKit
+          even in cases where those applications don't use WebKit
+
+        * kjs/date_object.cpp: Changed constants that were derived by multiplying other constants
+        to use immediate numbers instead. Apparently, double constant expressions of the type we
+        had here are evaluated at load time.
+
+        * kjs/list.cpp: Can't use OwnArrayPtr in ListImp because of the global instances of
+        ListImp, so go back to using a plain old pointer.
+        (KJS::List::List): Set overflow to 0 when initializing ListImp.
+        (KJS::List::release): Replace a clear call with a delete and explicit set to 0.
+        (KJS::List::append): Use raw pointers, and do a delete [] instead of finessing it with
+        a swap of OwnArrayPtr.
+        (KJS::List::copyFrom): Remove now-unneeded get().
+        (KJS::List::copyTail): Ditto.
+
+        * kjs/ustring.cpp: Changed UString::Rep::empty initializer a bit so that it doesn't get
+        a static initializer routine. Had to get rid of one level of constant to get the compiler
+        to understand it could initialize without any code.
+
+        - added a build step that checks for init routines
+
+        * JavaScriptCore.xcodeproj/project.pbxproj: Deleted now-unused custom build rule that
+        was replaced by the generate-derived-sources script a while back. Added a custom build
+        phase that invokes the check-for-global-initializers script.
+
 2006-03-28  Timothy Hatcher  <timothy@apple.com>
 
         Reviewed by Eric.
index 5e7a3852932896a072d629a160c0d6b754cf9100..9bee3ac26989d208d68368ee0df447599eae0cd9 100644 (file)
                93F0B3AC09BB4DC00068FCE3 /* Parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 93F0B3AA09BB4DC00068FCE3 /* Parser.h */; };
 /* End PBXBuildFile section */
 
-/* Begin PBXBuildRule section */
-               937C34BA0868E21B006F4B22 /* PBXBuildRule */ = {
-                       isa = PBXBuildRule;
-                       compilerSpec = com.apple.compilers.proxy.script;
-                       fileType = sourcecode.yacc;
-                       isEditable = 1;
-                       outputFiles = (
-                               "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).h",
-                               "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).cpp",
-                       );
-                       script = "bison -d -p kjsyy \"$INPUT_FILE_PATH\" -o \"$DERIVED_FILE_DIR/$INPUT_FILE_BASE.cpp\"\ncat \"$DERIVED_FILE_DIR/$INPUT_FILE_BASE.cpp.h\" \"$DERIVED_FILE_DIR/$INPUT_FILE_BASE.hpp\" > \"$DERIVED_FILE_DIR/$INPUT_FILE_BASE.h\" 2> /dev/null || printf \"\"";
-               };
-/* End PBXBuildRule section */
-
 /* Begin PBXBuildStyle section */
                014CEA440018CDF011CA2923 /* Development */ = {
                        isa = PBXBuildStyle;
                        buildPhases = (
                                932F5B3F0822A1C700736975 /* Headers */,
                                932F5B910822A1C700736975 /* Sources */,
+                               9319586B09D9F91A00A56FD4 /* Check For Global Initializers */,
                                932F5BD20822A1C700736975 /* Frameworks */,
                        );
                        buildRules = (
-                               937C34BA0868E21B006F4B22 /* PBXBuildRule */,
                        );
                        buildSettings = {
                                DEBUG_DEFINES = NDEBUG;
                        shellPath = /bin/sh;
                        shellScript = "./generate-derived-sources\n";
                };
+               9319586B09D9F91A00A56FD4 /* Check For Global Initializers */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputPaths = (
+                       );
+                       name = "Check For Global Initializers";
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "if [ -f ../WebKitTools/Scripts/check-for-global-initializers ]; then\n    ../WebKitTools/Scripts/check-for-global-initializers || exit $?\nfi";
+               };
 /* End PBXShellScriptBuildPhase section */
 
 /* Begin PBXSourcesBuildPhase section */
index 96c25b82a1f2ff9826e93ab6462327bb31706455..529c0cc00a51b283158f04965813fc5ce64ec264 100644 (file)
@@ -130,12 +130,13 @@ const double hoursPerDay = 24;
 const double minutesPerHour = 60;
 const double secondsPerMinute = 60;
 const double msPerSecond = 1000;
-const double msPerMinute = msPerSecond * secondsPerMinute;
-const double msPerHour = msPerMinute * minutesPerHour;
-const double msPerDay = msPerHour * hoursPerDay;
+const double msPerMinute = 60 * 1000;
+const double msPerHour = 60 * 60 * 1000;
+const double msPerDay = 24 * 60 * 60 * 1000;
+
 static const char * const weekdayName[7] = { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" };
 static const char * const monthName[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
-    
+
 static double makeTime(tm *, double ms, bool utc);
 static double parseDate(const UString &);
 static double timeClip(double);
index a9120bb1489ff2fc65cdb1b55a10b0e0cb7574b2..e9a73c2be38750aa2f399ba6d9fdcc1d55d96743 100644 (file)
@@ -24,7 +24,6 @@
 
 #include "internal.h"
 #include <algorithm>
-#include <kxmlcore/OwnArrayPtr.h>
 
 #define DUMP_STATISTICS 0
 
@@ -42,7 +41,7 @@ struct ListImp : ListImpBase
 {
     ListImpState state;
     int capacity;
-    OwnArrayPtr<JSValue*> overflow;
+    JSValue** overflow;
 
     union {
         JSValue *values[inlineValuesSize];
@@ -171,6 +170,8 @@ List::List() : _impBase(allocateListImp()), _needsMarking(false)
     imp->refCount = 1;
     imp->valueRefCount = 1;
     imp->capacity = 0;
+    imp->overflow = 0;
+
 #if DUMP_STATISTICS
     if (++numLists > numListsHighWaterMark)
         numListsHighWaterMark = numLists;
@@ -185,6 +186,7 @@ List::List(bool needsMarking) : _impBase(allocateListImp()), _needsMarking(needs
     imp->refCount = 1;
     imp->valueRefCount = !needsMarking;
     imp->capacity = 0;
+    imp->overflow = 0;
 
 #if DUMP_STATISTICS
     if (++numLists > numListsHighWaterMark)
@@ -210,7 +212,8 @@ void List::release()
             ++numListsBiggerThan[i];
 #endif
 
-    imp->overflow.clear();
+    delete [] imp->overflow;
+    imp->overflow = 0;
 
     if (imp->state == usedInPool) {
         imp->state = unusedInPool;
@@ -271,12 +274,13 @@ void List::append(JSValue *v)
     
     if (i >= imp->capacity) {
         int newCapacity = i * 2;
-        OwnArrayPtr<JSValue*> newOverflow(new JSValue* [newCapacity - inlineValuesSize]);
-        JSValue** oldOverflow = imp->overflow.get();
+        JSValue** newOverflow = new JSValue* [newCapacity - inlineValuesSize];
+        JSValue** oldOverflow = imp->overflow;
         int oldOverflowSize = i - inlineValuesSize;
         for (int j = 0; j != oldOverflowSize; j++)
             newOverflow[j] = oldOverflow[j];
-        imp->overflow.swap(newOverflow);
+        delete [] oldOverflow;
+        imp->overflow = newOverflow;
         imp->capacity = newCapacity;
     }
     
@@ -300,7 +304,7 @@ void List::copyFrom(const List& other)
     for (int i = 0; i != inlineSize; ++i)
         append(imp->values[i]);
 
-    JSValue** overflow = imp->overflow.get();
+    JSValue** overflow = imp->overflow;
     int overflowSize = size - inlineSize;
     for (int i = 0; i != overflowSize; ++i)
         append(overflow[i]);
@@ -319,7 +323,7 @@ List List::copyTail() const
     for (int i = 1; i < inlineSize; ++i)
         copy.append(imp->values[i]);
 
-    JSValue** overflow = imp->overflow.get();
+    JSValue** overflow = imp->overflow;
     int overflowSize = size - inlineSize;
     for (int i = 0; i < overflowSize; ++i)
         copy.append(overflow[i]);
index 3242a80c7f2fa731d8c0f16b32add87a0b0f3528..2f5a4ffd1d0b61a0f8754cb0acb0e348817309c2 100644 (file)
@@ -136,9 +136,8 @@ bool operator==(const CString& c1, const CString& c2)
 
 // Hack here to avoid a global with a constructor; point to an unsigned short instead of a UChar.
 static unsigned short almostUChar;
-static UChar *const nonNullUCharPointer = reinterpret_cast<UChar *>(&almostUChar);
 UString::Rep UString::Rep::null = { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
-UString::Rep UString::Rep::empty = { 0, 0, 1, 0, 0, 0, nonNullUCharPointer, 0, 0, 0, 0 };
+UString::Rep UString::Rep::empty = { 0, 0, 1, 0, 0, 0, reinterpret_cast<UChar*>(&almostUChar), 0, 0, 0, 0 };
 const int normalStatBufferSize = 4096;
 static char *statBuffer = 0;
 static int statBufferSize = 0;