JavaScriptCore:
authordarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 19 Aug 2008 04:39:04 +0000 (04:39 +0000)
committerdarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 19 Aug 2008 04:39:04 +0000 (04:39 +0000)
commit15f990d92681e2b8e4f39a536adb3d1e9ac05788
treeba60f974c4e17a26771f36ec88b11b8c13ed8bf2
parent569388eaec674ce6811d063f2ee35ca61b43adeb
JavaScriptCore:

2008-08-12  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - eliminate JSValue::type()

        This will make it slightly easier to change the JSImmediate design without
        having to touch so many call sites.

        SunSpider says this change is a wash (looked like a slight speedup, but not
        statistically significant).

        * API/JSStringRef.cpp: Removed include of JSType.h.
        * API/JSValueRef.cpp: Removed include of JSType.h.
        (JSValueGetType): Replaced use of JSValue::type() with
        JSValue::is functions.

        * JavaScriptCore.exp: Updated.

        * VM/JSPropertyNameIterator.cpp: Removed type() implementation.
        (KJS::JSPropertyNameIterator::toPrimitive): Changed to take
        PreferredPrimitiveType argument instead of JSType.
        * VM/JSPropertyNameIterator.h: Ditto.

        * VM/Machine.cpp:
        (KJS::fastIsNumber): Updated for name change.
        (KJS::fastToInt32): Ditto.
        (KJS::fastToUInt32): Ditto.
        (KJS::jsAddSlowCase): Updated toPrimitive caller for change from
        JSType to PreferredPrimitiveType.
        (KJS::jsAdd): Replaced calls to JSValue::type() with calls to
        JSValue::isString().
        (KJS::jsTypeStringForValue): Replaced calls to JSValue::type()
        with multiple calls to JSValue::is -- we could make this a
        virtual function instead if we want to have faster performance.
        (KJS::Machine::privateExecute): Renamed JSImmediate::toTruncatedUInt32
        to JSImmediate::getTruncatedUInt32 for consistency with other functions.
        Changed two calls of JSValue::type() to JSValue::isString().

        * kjs/GetterSetter.cpp:
        (KJS::GetterSetter::toPrimitive): Changed to take
        PreferredPrimitiveType argument instead of JSType.
        (KJS::GetterSetter::isGetterSetter): Added.
        * kjs/GetterSetter.h:

        * kjs/JSCell.cpp:
        (KJS::JSCell::isString): Added.
        (KJS::JSCell::isGetterSetter): Added.
        (KJS::JSCell::isObject): Added.

        * kjs/JSCell.h: Eliminated type function. Added isGetterSetter.
        Made isString and isObject virtual. Changed toPrimitive to take
        PreferredPrimitiveType argument instead of JSType.
        (KJS::JSCell::isNumber): Use Heap::isNumber for faster performance.
        (KJS::JSValue::isGetterSetter): Added.
        (KJS::JSValue::toPrimitive): Changed to take
        PreferredPrimitiveType argument instead of JSType.

        * kjs/JSImmediate.h: Removed JSValue::type() and replaced
        JSValue::toTruncatedUInt32 with JSValue::getTruncatedUInt32.
        (KJS::JSImmediate::isEitherImmediate): Added.

        * kjs/JSNotAnObject.cpp:
        (KJS::JSNotAnObject::toPrimitive): Changed to take
        PreferredPrimitiveType argument instead of JSType.
        * kjs/JSNotAnObject.h: Ditto.
        * kjs/JSNumberCell.cpp:
        (KJS::JSNumberCell::toPrimitive): Ditto.
        * kjs/JSNumberCell.h:
        (KJS::JSNumberCell::toInt32): Renamed from fastToInt32. There's no
        other "slow" version of this once you have a JSNumberCell, so there's
        no need for "fast" in the name. It's a feature that this hides the
        base class toInt32, which does the same job less efficiently (and has
        an additional ExecState argument).
        (KJS::JSNumberCell::toUInt32): Ditto.

        * kjs/JSObject.cpp:
        (KJS::callDefaultValueFunction): Use isGetterSetter instead of type.
        (KJS::JSObject::getPrimitiveNumber): Use PreferredPrimitiveType.
        (KJS::JSObject::defaultValue): Ditto.
        (KJS::JSObject::defineGetter): Use isGetterSetter.
        (KJS::JSObject::defineSetter): Ditto.
        (KJS::JSObject::lookupGetter): Ditto.
        (KJS::JSObject::lookupSetter): Ditto.
        (KJS::JSObject::toNumber): Use PreferredPrimitiveType.
        (KJS::JSObject::toString): Ditto.
        (KJS::JSObject::isObject): Added.

        * kjs/JSObject.h:
        (KJS::JSObject::inherits): Call the isObject from JSCell; it's now
        hidden by our override of isObject.
        (KJS::JSObject::getOwnPropertySlotForWrite): Use isGetterSetter
        instead of type.
        (KJS::JSObject::getOwnPropertySlot): Ditto.
        (KJS::JSObject::toPrimitive): Use PreferredPrimitiveType.

        * kjs/JSString.cpp:
        (KJS::JSString::toPrimitive): Use PreferredPrimitiveType.
        (KJS::JSString::isString): Added.
        * kjs/JSString.h: Ditto.

        * kjs/JSValue.h: Removed type(), added isGetterSetter(). Added
        PreferredPrimitiveType enum and used it as the argument for the
        toPrimitive function.
        (KJS::JSValue::getBoolean): Simplified a bit an removed a branch.

        * kjs/collector.cpp:
        (KJS::typeName): Changed to use JSCell::is functions instead of
        calling JSCell::type.

        * kjs/collector.h:
        (KJS::Heap::isNumber): Renamed from fastIsNumber.

        * kjs/nodes.h: Added now-needed include of JSType, since the type
        is used here to record types of values in the tree.

        * kjs/operations.cpp:
        (KJS::equal): Rewrote to no longer depend on type().
        (KJS::strictEqual): Ditto.

JavaScriptGlue:

2008-08-12  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - eliminate JSValue::type()

        * JSUtils.cpp:
        (KJSValueToCFTypeInternal): Replaced uses of JSValue::type() with
        JSValue::is functions.
        * UserObjectImp.cpp:
        (UserObjectImp::getOwnPropertySlot): Ditto.
        (UserObjectImp::toPrimitive): Take PreferredPrimitiveType argument
        instead of JSType argument.
        * UserObjectImp.h: Ditto.

WebCore:

2008-08-12  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - eliminate JSValue::type()

        * bridge/c/c_instance.cpp:
        (KJS::Bindings::CInstance::defaultValue): Take PreferredPrimitiveType
        argument instead of JSType argument. Removed unneeded code to handle
        boolean, since that's never passed.
        * bridge/c/c_instance.h: Ditto.

        * bridge/c/c_utility.cpp:
        (KJS::Bindings::convertValueToNPVariant): Use JSValue::is functions
        instead of JSValue::type(). Removed unneeded code to handle
        "unspecified".

        * bridge/jni/jni_instance.cpp:
        (JavaInstance::defaultValue): Take PreferredPrimitiveType argument
        instead of JSType argument. Removed unneeded code to handle boolean.
        * bridge/jni/jni_instance.h: Ditto.

        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::convertValueToJObject): Use JSValue::is functions
        instead of JSValue::type().

        * bridge/objc/objc_instance.h: Take PreferredPrimitiveType argument
        instead of JSType argument. Removed unused argument.
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::getValueOfUndefinedField): Removed unused argument.
        (ObjcInstance::defaultValue): Take PreferredPrimitiveType argument
        instead of JSType argument. Removed unneeded code to handle boolean
        and another dead code path for unknown types.

        * bridge/objc/objc_runtime.h: Take PreferredPrimitiveType argument
        instead of JSType argument. Removed override of type() that caused
        the fallback object to return "UndefinedType" when there is no
        invokeUndefinedMethodFromWebScript:withArguments: method defined.
        That didn't accomplish much, since most checks for undefined don't
        ever call type().
        * bridge/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::defaultValue): Ditto.

        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtInstance::defaultValue): Take PreferredPrimitiveType
        argument instead of JSType argument. Removed unneeded code to handle
        boolean.
        * bridge/qt/qt_instance.h: Ditto.

        * bridge/runtime.h:
        (KJS::Bindings::Instance::getValueOfUndefinedField): Removed
        unsed argument.
        * bridge/runtime_object.cpp:
        (RuntimeObjectImp::defaultValue): Take PreferredPrimitiveType
        argument instead of JSType argument.
        * bridge/runtime_object.h: Ditto.

WebKit/mac:

2008-08-12  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - eliminate JSValue::type()

        * WebView/WebView.mm:
        (aeDescFromJSValue): Rewrite to use the JSValue::is functions instead
        of a switch on JSValue::type().

LayoutTests:

2008-08-12  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - added a test since I had to rewrite the == and === operators

        * fast/js/equality-expected.txt: Added.
        * fast/js/equality.html: Added.
        * fast/js/resources/equality.js: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@35830 268f45cc-cd09-0410-ab3c-d52691b4dbfc
50 files changed:
JavaScriptCore/API/JSValueRef.cpp
JavaScriptCore/ChangeLog
JavaScriptCore/JavaScriptCore.exp
JavaScriptCore/VM/JSPropertyNameIterator.cpp
JavaScriptCore/VM/JSPropertyNameIterator.h
JavaScriptCore/VM/Machine.cpp
JavaScriptCore/kjs/GetterSetter.cpp
JavaScriptCore/kjs/GetterSetter.h
JavaScriptCore/kjs/JSCell.cpp
JavaScriptCore/kjs/JSCell.h
JavaScriptCore/kjs/JSImmediate.h
JavaScriptCore/kjs/JSNotAnObject.cpp
JavaScriptCore/kjs/JSNotAnObject.h
JavaScriptCore/kjs/JSNumberCell.cpp
JavaScriptCore/kjs/JSNumberCell.h
JavaScriptCore/kjs/JSObject.cpp
JavaScriptCore/kjs/JSObject.h
JavaScriptCore/kjs/JSString.cpp
JavaScriptCore/kjs/JSString.h
JavaScriptCore/kjs/JSValue.h
JavaScriptCore/kjs/collector.cpp
JavaScriptCore/kjs/collector.h
JavaScriptCore/kjs/nodes.h
JavaScriptCore/kjs/operations.cpp
JavaScriptGlue/ChangeLog
JavaScriptGlue/JSUtils.cpp
JavaScriptGlue/UserObjectImp.cpp
JavaScriptGlue/UserObjectImp.h
LayoutTests/ChangeLog
LayoutTests/fast/js/equality-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/equality.html [new file with mode: 0644]
LayoutTests/fast/js/resources/equality.js [new file with mode: 0644]
WebCore/ChangeLog
WebCore/bridge/c/c_instance.cpp
WebCore/bridge/c/c_instance.h
WebCore/bridge/c/c_utility.cpp
WebCore/bridge/jni/jni_instance.cpp
WebCore/bridge/jni/jni_instance.h
WebCore/bridge/jni/jni_jsobject.mm
WebCore/bridge/objc/objc_instance.h
WebCore/bridge/objc/objc_instance.mm
WebCore/bridge/objc/objc_runtime.h
WebCore/bridge/objc/objc_runtime.mm
WebCore/bridge/qt/qt_instance.cpp
WebCore/bridge/qt/qt_instance.h
WebCore/bridge/runtime.h
WebCore/bridge/runtime_object.cpp
WebCore/bridge/runtime_object.h
WebKit/mac/ChangeLog
WebKit/mac/WebView/WebView.mm