Changeset 24873 in webkit


Ignore:
Timestamp:
Aug 4, 2007 10:20:35 PM (17 years ago)
Author:
mjs
Message:

Reviewed by Darin and Adam.


<rdar://problem/5368990> REGRESSION: newsgator.com sign-on 6x slower than Safari 3 beta due to GC changes (14808)

  • kjs/string_object.cpp: (KJS::replace): if the string didn't change (very common in some cases) reuse the original string value. (KJS::StringProtoFunc::callAsFunction): Pass in the StringImp* when replacing, not just the UString.
  • kjs/string_object.h: (KJS::StringInstance::internalValue): covariant override to return StringImp for convenience
Location:
trunk/JavaScriptCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r24868 r24873  
     12007-08-04  Maciej Stachowiak  <mjs@apple.com>
     2
     3        Reviewed by Darin and Adam.
     4       
     5        <rdar://problem/5368990> REGRESSION: newsgator.com sign-on 6x slower than Safari 3 beta due to GC changes (14808)
     6
     7        * kjs/string_object.cpp:
     8        (KJS::replace): if the string didn't change (very common in some cases) reuse the original string value.
     9        (KJS::StringProtoFunc::callAsFunction): Pass in the StringImp* when replacing, not just the UString.
     10        * kjs/string_object.h:
     11        (KJS::StringInstance::internalValue): covariant override to return StringImp for convenience
     12
    1132007-08-04  Mark Rowe  <mrowe@apple.com>
    214
  • trunk/JavaScriptCore/kjs/string_object.cpp

    r24633 r24873  
    314314}
    315315
    316 static JSValue *replace(ExecState *exec, const UString &source, JSValue *pattern, JSValue *replacement)
    317 {
     316static JSValue *replace(ExecState *exec, StringImp* sourceVal, JSValue *pattern, JSValue *replacement)
     317{
     318  UString source = sourceVal->value();
    318319  JSObject *replacementFunction = 0;
    319320  UString replacementString;
     
    366367         
    367368          args.append(jsNumber(completeMatchStart));
    368           args.append(jsString(source));
     369          args.append(sourceVal);
    369370
    370371          substitutedReplacement = replacementFunction->call(exec, exec->dynamicInterpreter()->globalObject(),
     
    390391
    391392    UString result;
     393
    392394    if (sourceRanges)
    393395        result = source.spliceSubstringsWithSeparators(sourceRanges, sourceRangeCount, replacements, replacementCount);
     
    395397    delete [] sourceRanges;
    396398    delete [] replacements;
     399
     400    if (result == source)
     401      return sourceVal;
    397402
    398403    return jsString(result);
     
    405410  // Do the replacement
    406411  if (matchPos == -1)
    407     return jsString(source);
     412    return sourceVal;
    408413 
    409414  if (replacementFunction) {
     
    412417      args.append(jsString(source.substr(matchPos, matchLen)));
    413418      args.append(jsNumber(matchPos));
    414       args.append(jsString(source));
     419      args.append(sourceVal);
    415420     
    416421      replacementString = replacementFunction->call(exec, exec->dynamicInterpreter()->globalObject(),
     
    563568  }
    564569  case Replace:
    565     result = replace(exec, s, a0, a1);
     570    StringImp* sVal = thisObj->inherits(&StringInstance::info) ?
     571      static_cast<StringInstance*>(thisObj)->internalValue() :
     572      static_cast<StringImp*>(jsString(s));
     573
     574    result = replace(exec, sVal, a0, a1);
    566575    break;
    567576  case Slice:
  • trunk/JavaScriptCore/kjs/string_object.h

    r24633 r24873  
    4242    virtual const ClassInfo *classInfo() const { return &info; }
    4343    static const ClassInfo info;
     44
     45    StringImp* internalValue() const { return static_cast<StringImp*>(JSWrapperObject::internalValue());}
     46
    4447  private:
    4548    static JSValue *lengthGetter(ExecState *exec, JSObject *, const Identifier&, const PropertySlot &slot);
Note: See TracChangeset for help on using the changeset viewer.