Ignore:
Timestamp:
Oct 30, 2009, 3:23:31 PM (16 years ago)
Author:
[email protected]
Message:

https://bugs.webkit.org/show_bug.cgi?id=30942
Use pointers instead of copies to pass GregorianDateTime objects around.

Patch by Geoffrey Garen <[email protected]> on 2009-10-29
Reviewed by Darin Adler.

SunSpider reports a shocking 4.5% speedup on date-format-xparb, and 1.3%
speedup on date-format-tofte.

  • runtime/DateInstance.cpp:

(JSC::DateInstance::gregorianDateTime):

  • runtime/DateInstance.h:
  • runtime/DatePrototype.cpp:

(JSC::formatLocaleDate):
(JSC::dateProtoFuncToString):
(JSC::dateProtoFuncToUTCString):
(JSC::dateProtoFuncToISOString):
(JSC::dateProtoFuncToDateString):
(JSC::dateProtoFuncToTimeString):
(JSC::dateProtoFuncGetFullYear):
(JSC::dateProtoFuncGetUTCFullYear):
(JSC::dateProtoFuncToGMTString):
(JSC::dateProtoFuncGetMonth):
(JSC::dateProtoFuncGetUTCMonth):
(JSC::dateProtoFuncGetDate):
(JSC::dateProtoFuncGetUTCDate):
(JSC::dateProtoFuncGetDay):
(JSC::dateProtoFuncGetUTCDay):
(JSC::dateProtoFuncGetHours):
(JSC::dateProtoFuncGetUTCHours):
(JSC::dateProtoFuncGetMinutes):
(JSC::dateProtoFuncGetUTCMinutes):
(JSC::dateProtoFuncGetSeconds):
(JSC::dateProtoFuncGetUTCSeconds):
(JSC::dateProtoFuncGetTimezoneOffset):
(JSC::setNewValueFromTimeArgs):
(JSC::setNewValueFromDateArgs):
(JSC::dateProtoFuncSetYear):
(JSC::dateProtoFuncGetYear): Renamed getGregorianDateTime to gregorianDateTime,
since it no longer has an out parameter. Uses 0 to indicate invalid dates.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/runtime/DateInstance.cpp

    r50183 r50359  
    4747}
    4848
    49 bool DateInstance::getGregorianDateTime(ExecState* exec, bool outputIsUTC, GregorianDateTime& t) const
     49const GregorianDateTime* DateInstance::gregorianDateTime(ExecState* exec, bool outputIsUTC) const
    5050{
    5151    double milli = internalNumber();
    5252    if (isnan(milli))
    53         return false;
     53        return 0;
    5454
    5555    if (!m_data)
     
    5858    if (outputIsUTC) {
    5959        if (m_data->m_gregorianDateTimeUTCCachedForMS != milli) {
    60             WTF::msToGregorianDateTime(internalNumber(), true, m_data->m_cachedGregorianDateTimeUTC);
     60            msToGregorianDateTime(internalNumber(), true, m_data->m_cachedGregorianDateTimeUTC);
    6161            m_data->m_gregorianDateTimeUTCCachedForMS = milli;
    6262        }
    63         t.copyFrom(m_data->m_cachedGregorianDateTimeUTC);
    64     } else {
    65         if (m_data->m_gregorianDateTimeCachedForMS != milli) {
    66             WTF::msToGregorianDateTime(internalNumber(), false, m_data->m_cachedGregorianDateTime);
    67             m_data->m_gregorianDateTimeCachedForMS = milli;
    68         }
    69         t.copyFrom(m_data->m_cachedGregorianDateTime);
     63        return &m_data->m_cachedGregorianDateTimeUTC;
    7064    }
    7165
    72     return true;
     66    if (m_data->m_gregorianDateTimeCachedForMS != milli) {
     67        msToGregorianDateTime(internalNumber(), false, m_data->m_cachedGregorianDateTime);
     68        m_data->m_gregorianDateTimeCachedForMS = milli;
     69    }
     70    return &m_data->m_cachedGregorianDateTime;
    7371}
    7472
Note: See TracChangeset for help on using the changeset viewer.