top level:
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 12 Aug 2002 20:14:02 +0000 (20:14 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 12 Aug 2002 20:14:02 +0000 (20:14 +0000)
commitc11fd46a86f599f6726ad047181c2a478aa68a77
tree838cc6cb4a20c5b194e81e8f51c480420d78a16f
parentb719ab6c474862f79a28c3c8196a684227b447c7
top level:

        * 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: https://svn.webkit.org/repository/webkit/trunk@1799 268f45cc-cd09-0410-ab3c-d52691b4dbfc
33 files changed:
JavaScriptCore/ChangeLog
JavaScriptCore/ChangeLog-2002-12-03
JavaScriptCore/ChangeLog-2003-10-25
JavaScriptCore/kjs/array_object.cpp
JavaScriptCore/kjs/array_object.h
JavaScriptCore/kjs/bool_object.cpp
JavaScriptCore/kjs/date_object.cpp
JavaScriptCore/kjs/error_object.cpp
JavaScriptCore/kjs/function.cpp
JavaScriptCore/kjs/function_object.cpp
JavaScriptCore/kjs/internal.cpp
JavaScriptCore/kjs/internal.h
JavaScriptCore/kjs/math_object.cpp
JavaScriptCore/kjs/nodes.cpp
JavaScriptCore/kjs/nodes.h
JavaScriptCore/kjs/nodes2string.cpp
JavaScriptCore/kjs/number_object.cpp
JavaScriptCore/kjs/object.cpp
JavaScriptCore/kjs/object.h
JavaScriptCore/kjs/object_object.cpp
JavaScriptCore/kjs/regexp_object.cpp
JavaScriptCore/kjs/string_object.cpp
JavaScriptCore/kjs/types.cpp
JavaScriptCore/kjs/types.h
JavaScriptCore/kjs/ustring.cpp
JavaScriptCore/kjs/ustring.h
JavaScriptCore/kjs/value.cpp
JavaScriptCore/kjs/value.h
WebCore/ChangeLog-2002-12-03
WebCore/ChangeLog-2003-10-25
WebCore/ChangeLog-2005-08-23
WebCore/force-clean-timestamp
WebCore/khtml/ecma/kjs_window.h