Changeset 27086 in webkit for trunk/JavaScriptCore/kjs/value.h


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/value.h

    r26912 r27086  
    8282
    8383    // Basic conversions.
    84     JSValue *toPrimitive(ExecState *exec, JSType preferredType = UnspecifiedType) const;
     84    JSValue* toPrimitive(ExecState* exec, JSType preferredType = UnspecifiedType) const;
     85    bool getPrimitiveNumber(ExecState* exec, double& number) const;
     86
    8587    bool toBoolean(ExecState *exec) const;
    8688    double toNumber(ExecState *exec) const;
     
    148150    // Basic conversions.
    149151    virtual JSValue *toPrimitive(ExecState *exec, JSType preferredType = UnspecifiedType) const = 0;
     152    virtual bool getPrimitiveNumber(ExecState* exec, double& number) const = 0;
    150153    virtual bool toBoolean(ExecState *exec) const = 0;
    151154    virtual double toNumber(ExecState *exec) const = 0;
     
    366369}
    367370
    368 inline JSValue *JSValue::toPrimitive(ExecState *exec, JSType preferredType) const
    369 {
    370     return JSImmediate::isImmediate(this) ? const_cast<JSValue *>(this) : asCell()->toPrimitive(exec, preferredType);
     371inline JSValue* JSValue::toPrimitive(ExecState* exec, JSType preferredType) const
     372{
     373    return JSImmediate::isImmediate(this) ? const_cast<JSValue*>(this) : asCell()->toPrimitive(exec, preferredType);
     374}
     375
     376inline bool JSValue::getPrimitiveNumber(ExecState* exec, double& number) const
     377{
     378    if (JSImmediate::isImmediate(this)) {
     379        number = JSImmediate::toDouble(this);
     380        return true;
     381    }
     382    return asCell()->getPrimitiveNumber(exec, number);
    371383}
    372384
Note: See TracChangeset for help on using the changeset viewer.