Changeset 10757 in webkit for trunk/JavaScriptCore/kjs/value.cpp


Ignore:
Timestamp:
Oct 5, 2005, 6:13:18 PM (20 years ago)
Author:
ggaren
Message:
  • Darin and I rewrote our implementation of the SimpleNumber class to store number bit patterns in their floating point formats.

My tweaks reviewed by Darin.

~1% speedup on JS iBench.

  • kjs/internal.h: removed obsolete jsNumber declarations.
  • kjs/math_object.cpp: (MathFuncImp::callAsFunction): changed KJS::isNaN to isNaN
  • kjs/nodes.cpp: (PostfixResolveNode::evaluate): removed obsolete knownToBeInteger (PostfixBracketNode::evaluate): ditto (PostfixDotNode::evaluate): ditto (PrefixResolveNode::evaluate): ditto (PrefixBracketNode::evaluate): ditto (PrefixDotNode::evaluate): ditto (NegateNode::evaluate): ditto (valueForReadModifyAssignment): ditto
  • kjs/number_object.cpp: removed obsolete comment
  • kjs/operations.cpp: (KJS::equal): removed unnecessary isNaN checks (KJS::strictEqual): ditto (KJS::add): removed obsolete knownToBeInteger (KJS::mult): ditto
  • kjs/operations.h: removed include of "value.h" to prevent circular reference
  • kjs/simple_number.h: removed unnecessary #includes (KJS::SimpleNumber::make): see above (KJS::SimpleNumber::is): ditto (KJS::SimpleNumber::value): ditto
  • kjs/string_object.cpp: (StringProtoFuncImp::callAsFunction): changed KJS::isNaN to isNaN
  • kjs/ustring.cpp: removed unnecessary isNaN check (KJS::UString::toUInt32): ditto
  • kjs/value.cpp: (KJS::jsNumber): removed obsolete jsNumber definitions (KJS::ConstantValues::init): NaN is no longer a ConstantValue (KJS::ConstantValues::clear): ditto (KJS::ConstantValues::mark): ditto
  • kjs/value.h: removed obsolete knownToBeInteger (KJS::jsNaN): now returns a SimpleNumber (KJS::ValueImp::getUInt32): changed to account for NaN being a SimpleNumber (KJS::ValueImp::toBoolean): ditto (KJS::ValueImp::toString): changed to account for +/- 0.0 (KJS::jsZero): changed to reflect that SimpleNumber::make takes a double (KJS::jsOne): ditto (KJS::jsTwo): ditto (KJS::Number): removed obsolete non-double constructor declarations
File:
1 edited

Legend:

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

    r10701 r10757  
    4545AllocatedValueImp *ConstantValues::jsTrue = NULL;
    4646AllocatedValueImp *ConstantValues::jsFalse = NULL;
    47 AllocatedValueImp *ConstantValues::NaN = NULL;
    4847
    4948static const double D16 = 65536.0;
     
    183182}
    184183
    185 ValueImp *jsNumber(int i)
    186 {
    187     return SimpleNumber::fits(i) ? SimpleNumber::make(i) : new NumberImp(static_cast<double>(i));
    188 }
    189 
    190 ValueImp *jsNumber(unsigned i)
    191 {
    192     return SimpleNumber::fits(i) ? SimpleNumber::make(i) : new NumberImp(static_cast<double>(i));
    193 }
    194 
    195 ValueImp *jsNumber(long i)
    196 {
    197     return SimpleNumber::fits(i) ? SimpleNumber::make(i) : new NumberImp(static_cast<double>(i));
    198 }
    199 
    200 ValueImp *jsNumber(unsigned long i)
    201 {
    202     return SimpleNumber::fits(i) ? SimpleNumber::make(i) : new NumberImp(static_cast<double>(i));
    203 }
    204 
    205 ValueImp *jsNumber(long long i)
    206 {
    207     return SimpleNumber::fits(i) ? SimpleNumber::make(i) : new NumberImp(static_cast<double>(i));
    208 }
    209 
    210 ValueImp *jsNumber(unsigned long long i)
    211 {
    212     return SimpleNumber::fits(i) ? SimpleNumber::make(i) : new NumberImp(static_cast<double>(i));
    213 }
    214 
    215184ValueImp *jsNumber(double d)
    216185{
    217     return SimpleNumber::fits(d)
    218         ? SimpleNumber::make(static_cast<long>(d))
    219         : (isNaN(d) ? jsNaN() : new NumberImp(d));
    220 }
    221 
    222 ValueImp *jsNumber(double d, bool knownToBeInteger)
    223 {
    224     return (knownToBeInteger ? SimpleNumber::integerFits(d) : SimpleNumber::fits(d))
    225         ? SimpleNumber::make(static_cast<long>(d))
    226         : ((!knownToBeInteger && isNaN(d)) ? jsNaN() : new NumberImp(d));
     186  ValueImp *v = SimpleNumber::make(d);
     187  return v ? v : new NumberImp(d);
    227188}
    228189
     
    233194    jsTrue = new BooleanImp(true);
    234195    jsFalse = new BooleanImp(false);
    235     NaN = new NumberImp(::KJS::NaN);
    236196}
    237197
     
    242202    jsTrue = NULL;
    243203    jsFalse = NULL;
    244     NaN = NULL;
    245204}
    246205
     
    259218        if (!v->marked())
    260219            v->mark();
    261     if (AllocatedValueImp *v = NaN)
    262         if (!v->marked())
    263             v->mark();
    264 }
    265 
    266 }
     220}
     221
     222}
Note: See TracChangeset for help on using the changeset viewer.