Ignore:
Timestamp:
Mar 20, 2012, 1:22:57 PM (13 years ago)
Author:
[email protected]
Message:

Cache the type string of JavaScript object
https://bugs.webkit.org/show_bug.cgi?id=81446

Patch by Benjamin Poulain <[email protected]> on 2012-03-20
Reviewed by Geoffrey Garen.

Instead of creating the JSString every time, we create
lazily the strings in JSGlobalData.

This avoid the construction of the StringImpl and of the JSString,
which gives some performance improvements.

  • runtime/CommonIdentifiers.h:
  • runtime/JSValue.cpp:

(JSC::JSValue::toStringSlowCase):

  • runtime/Operations.cpp:

(JSC::jsTypeStringForValue):

  • runtime/SmallStrings.cpp:

(JSC::SmallStrings::SmallStrings):
(JSC::SmallStrings::finalizeSmallStrings):
(JSC::SmallStrings::initialize):
(JSC):

  • runtime/SmallStrings.h:

(SmallStrings):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/runtime/Operations.cpp

    r105698 r111433  
    5959JSValue jsTypeStringForValue(CallFrame* callFrame, JSValue v)
    6060{
     61    JSGlobalData& globalData = callFrame->globalData();
    6162    if (v.isUndefined())
    62         return jsNontrivialString(callFrame, "undefined");
     63        return globalData.smallStrings.undefinedString(&globalData);
    6364    if (v.isBoolean())
    64         return jsNontrivialString(callFrame, "boolean");
     65        return globalData.smallStrings.booleanString(&globalData);
    6566    if (v.isNumber())
    66         return jsNontrivialString(callFrame, "number");
     67        return globalData.smallStrings.numberString(&globalData);
    6768    if (v.isString())
    68         return jsNontrivialString(callFrame, "string");
     69        return globalData.smallStrings.stringString(&globalData);
    6970    if (v.isObject()) {
    7071        // Return "undefined" for objects that should be treated
    7172        // as null when doing comparisons.
    7273        if (asObject(v)->structure()->typeInfo().masqueradesAsUndefined())
    73             return jsNontrivialString(callFrame, "undefined");
     74            return globalData.smallStrings.undefinedString(&globalData);
    7475        CallData callData;
    7576        JSObject* object = asObject(v);
    7677        if (object->methodTable()->getCallData(object, callData) != CallTypeNone)
    77             return jsNontrivialString(callFrame, "function");
     78            return globalData.smallStrings.functionString(&globalData);
    7879    }
    79     return jsNontrivialString(callFrame, "object");
     80    return globalData.smallStrings.objectString(&globalData);
    8081}
    8182
Note: See TracChangeset for help on using the changeset viewer.