Ignore:
Timestamp:
Oct 25, 2007, 8:58:18 PM (18 years ago)
Author:
mjs
Message:

Reviewed by Oliver.

  • fold together toPrimitive() and toNumber() conversions for 0.5% gain on SunSpider
  • kjs/nodes.cpp: (KJS::SubNode::evaluate): Subtract directly, since toPrimitive() is not adding any value over toNumber() here. (KJS::valueForReadModifyAssignment): Ditto. (KJS::lessThan): Use new getPrimitiveNumber() method to avoid some virtual calls and branches. (KJS::lessThanEq): Ditto.
  • JavaScriptCore.exp: Export new functions as needed.
  • kjs/value.h: (KJS::JSValue::toPrimitive): Fixed formatting. (KJS::JSValue::getPrimitiveNumber): New method - this simultaneously converts to number and tells you whether a toPrimitive() conversion with a Number hint would have given a string.
  • kjs/internal.cpp: (KJS::StringImp::getPrimitiveNumber): Implemented. (KJS::NumberImp::getPrimitiveNumber): ditto (KJS::GetterSetterImp::getPrimitiveNumber): ditto (KJS::StringImp::toPrimitive): Fixed formatting. (KJS::NumberImp::toPrimitive): ditto (KJS::GetterSetterImp::toPrimitive): ditto
  • kjs/internal.h:
  • kjs/object.cpp: (KJS::JSObject::getPrimitiveNumber): Implemented.
  • kjs/object.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/internal.cpp

    r26912 r27086  
    5656// ------------------------------ StringImp ------------------------------------
    5757
    58 JSValue *StringImp::toPrimitive(ExecState *, JSType) const
    59 {
    60   return const_cast<StringImp *>(this);
     58JSValue* StringImp::toPrimitive(ExecState*, JSType) const
     59{
     60  return const_cast<StringImp*>(this);
     61}
     62
     63bool StringImp::getPrimitiveNumber(ExecState*, double& number) const
     64{
     65    number = val.toDouble();
     66    return false;
    6167}
    6268
     
    8389// ------------------------------ NumberImp ------------------------------------
    8490
    85 JSValue *NumberImp::toPrimitive(ExecState *, JSType) const
    86 {
    87   return const_cast<NumberImp *>(this);
     91JSValue* NumberImp::toPrimitive(ExecState*, JSType) const
     92{
     93    return const_cast<NumberImp*>(this);
     94}
     95
     96bool NumberImp::getPrimitiveNumber(ExecState*, double& number) const
     97{
     98    number = val;
     99    return true;
    88100}
    89101
     
    145157}
    146158
    147 JSValue *GetterSetterImp::toPrimitive(ExecState*, JSType) const
     159JSValue* GetterSetterImp::toPrimitive(ExecState*, JSType) const
    148160{
    149161    ASSERT(false);
    150162    return jsNull();
     163}
     164
     165bool GetterSetterImp::getPrimitiveNumber(ExecState*, double& number) const
     166{
     167    ASSERT(false);
     168    number = 0;
     169    return true;
    151170}
    152171
Note: See TracChangeset for help on using the changeset viewer.