• darin's avatar
    top level: · 07f7cce0
    darin authored
            * Tests/WebFoundation-Misc/ifnsurlextensions-test.m: (TestURLCommon):
    	Add tests for the new WebNSURLExtras methods.
    
            * Tests/libiftest/IFCheckLeaks.c: (IFCheckLeaksAtExit): Remove workaround for
    	CFPreferences race condition; it's now in WebFoundation.
    
    JavaScriptCore:
    
    	Speed improvements. 19% faster on cvs-js-performance, 1% on cvs-static-urls.
    
    	Use global string objects for length and other common property names rather
    	than constantly making and destroying them. Use integer versions of get() and
    	other related calls rather than always making a string.
    
    	Also get rid of many unneeded constructors, destructors, copy constructors, and
    	assignment operators. And make some functions non-virtual.
    
            * kjs/internal.h:
            * kjs/internal.cpp:
            (NumberImp::toUInt32): Implement.
            (ReferenceImp::ReferenceImp): Special case for numeric property names.
            (ReferenceImp::getPropertyName): Moved guts here from ValueImp. Handle numeric case.
            (ReferenceImp::getValue): Moved guts here from ValueImp. Handle numeric case.
            (ReferenceImp::putValue): Moved guts here from ValueImp. Handle numeric case.
            (ReferenceImp::deleteValue): Added. Handle numeric case.
    
            * kjs/array_object.h:
            * kjs/array_object.cpp: All-new array implementation that stores the elements
    	in a C++ array rather than in a property map.
            (ArrayInstanceImp::ArrayInstanceImp): Allocate the C++ array.
            (ArrayInstanceImp::~ArrayInstanceImp): Delete the C++ array.
            (ArrayInstanceImp::get): Implement both the old version and the new overload that
    	takes an unsigned index for speed.
            (ArrayInstanceImp::put): Implement both the old version and the new overload that
    	takes an unsigned index for speed.
            (ArrayInstanceImp::hasProperty): Implement both the old version and the new overload that
    	takes an unsigned index for speed.
            (ArrayInstanceImp::deleteProperty): Implement both the old version and the new overload that
    	takes an unsigned index for speed.
            (ArrayInstanceImp::setLength): Added. Used by the above to resize the array.
            (ArrayInstanceImp::mark): Mark the elements of the array too.
            (ArrayPrototypeImp::ArrayPrototypeImp): Pass the length to the array instance constructor.
    
            * kjs/bool_object.cpp:
            * kjs/date_object.cpp:
            * kjs/error_object.cpp:
            * kjs/function.cpp:
            * kjs/function_object.cpp:
            * kjs/math_object.cpp:
            * kjs/nodes.cpp:
            * kjs/nodes.h:
            * kjs/number_object.cpp:
            * kjs/object_object.cpp:
            * kjs/regexp_object.cpp:
            * kjs/string_object.cpp:
    
            * kjs/nodes2string.cpp: (SourceStream::operator<<): Add a special case for char now that
    	you can't create a UString from a char implicitly.
    
            * kjs/object.h:
            * kjs/object.cpp:
            (ObjectImp::get): Call through to the string version if the numeric version is not implemented.
            (ObjectImp::put): Call through to the string version if the numeric version is not implemented.
            (ObjectImp::hasProperty): Call through to the string version if the numeric version is not implemented.
            (ObjectImp::deleteProperty): Call through to the string version if the numeric version is not implemented.
    
            * kjs/types.h:
            * kjs/types.cpp:
            (Reference::Reference): Added constructors for the numeric property name case.
    
            * kjs/ustring.h: Made the constructor that turns a character into a string be explicit so we
    	don't get numbers that turn themselves into strings.
            * kjs/ustring.cpp:
            (UString::UString): Detect the empty string case, and use a shared empty string.
            (UString::find): Add an overload for single character finds.
            (UString::rfind): Add an overload for single character finds.
            (KJS::operator==): Fix bug where it would call strlen(0) if the first string was not null.
    	Also handle non-ASCII characters consistently with the rest of the code by casting to unsigned char
    	just in case.
    
            * kjs/value.h: Make ValueImp and all subclasses non-copyable and non-assignable.
            * kjs/value.cpp:
            (ValueImp::toUInt32): New interface, mainly useful so we can detect array indices and not turn
    	them into strings and back.
            (ValueImp::toInteger): Use the new toUInt32. Probably can use more improvement.
            (ValueImp::toInt32): Use the new toUInt32. Probably can use more improvement.
            (ValueImp::toUInt16): Use the new toUInt32. Probably can use more improvement.
            (ValueImp::getBase): Remove handling of the Reference case. That's in ReferenceImp now.
            (ValueImp::getPropertyName): Remove handling of the Reference case. That's in ReferenceImp now.
            (ValueImp::getValue): Remove handling of the Reference case. That's in ReferenceImp now.
            (ValueImp::putValue): Remove handling of the Reference case. That's in ReferenceImp now.
            (ValueImp::deleteValue): Added. Used so we can do delete the same way we do put.
    
    WebFoundation:
    
            * CacheLoader.subproj/WebHTTPResourceLoader.m:
            (-[WebHTTPProtocolHandler createWFLoadRequest]): Fix handling of paths with queries
    	and some other subtle path and port number handling issues by using _web_hostWithPort
    	and _web_pathWithQuery.
    
            * Misc.subproj/WebNSURLExtras.h:
            * Misc.subproj/WebNSURLExtras.m:
            (-[NSURL _web_hostWithPort]): Added.
            (-[NSURL _web_pathWithQuery]): Added.
    
            * CacheLoader.subproj/WebResourceLoad.m:
            (initLoader): Get some random preference before creating threads. This makes it impossible
    	to run into the CFPreferences race condition.
    
    WebCore:
    
            * force-clean-timestamp: Need a full build because of KJS changes.
            * khtml/ecma/kjs_window.h: Need to store an Object, not an ObjectImp, because there's no way
    	to copy an ObjectImp. KJS changes caught this mistake.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@1799 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    07f7cce0
number_object.cpp 5.42 KB