Changeset 182280 in webkit


Ignore:
Timestamp:
Apr 2, 2015 11:53:32 AM (9 years ago)
Author:
Yusuke Suzuki
Message:

Clean up EnumerationMode to easily extend
https://bugs.webkit.org/show_bug.cgi?id=143276

Reviewed by Geoffrey Garen.

Source/JavaScriptCore:

To make the followings easily,

  1. Adding new flag Include/ExcludeSymbols in the Object.getOwnPropertySymbols patch
  2. Make ExcludeSymbols implicitly default for the existing flags

we encapsulate EnumerationMode flags into EnumerationMode class.

And this class manages 2 flags. Later it will be extended to 3.

  1. DontEnumPropertiesMode (default is Exclude)
  2. JSObjectPropertiesMode (default is Include)
  3. SymbolPropertiesMode (default is Exclude)

SymbolPropertiesMode will be added in Object.getOwnPropertySymbols patch.

This patch replaces places using ExcludeDontEnumProperties
to EnumerationMode() value which represents default mode.

  • API/JSCallbackObjectFunctions.h:

(JSC::JSCallbackObject<Parent>::getOwnNonIndexPropertyNames):

  • API/JSObjectRef.cpp:

(JSObjectCopyPropertyNames):

  • bindings/ScriptValue.cpp:

(Deprecated::jsToInspectorValue):

  • bytecode/ObjectAllocationProfile.h:

(JSC::ObjectAllocationProfile::possibleDefaultPropertyCount):

  • runtime/ArrayPrototype.cpp:

(JSC::arrayProtoFuncSort):

  • runtime/EnumerationMode.h:

(JSC::EnumerationMode::EnumerationMode):
(JSC::EnumerationMode::includeDontEnumProperties):
(JSC::EnumerationMode::includeJSObjectProperties):
(JSC::shouldIncludeDontEnumProperties): Deleted.
(JSC::shouldExcludeDontEnumProperties): Deleted.
(JSC::shouldIncludeJSObjectPropertyNames): Deleted.
(JSC::modeThatSkipsJSObject): Deleted.

  • runtime/GenericArgumentsInlines.h:

(JSC::GenericArguments<Type>::getOwnPropertyNames):

  • runtime/JSArray.cpp:

(JSC::JSArray::getOwnNonIndexPropertyNames):

  • runtime/JSArrayBuffer.cpp:

(JSC::JSArrayBuffer::getOwnNonIndexPropertyNames):

  • runtime/JSArrayBufferView.cpp:

(JSC::JSArrayBufferView::getOwnNonIndexPropertyNames):

  • runtime/JSFunction.cpp:

(JSC::JSFunction::getOwnNonIndexPropertyNames):

  • runtime/JSFunction.h:
  • runtime/JSGenericTypedArrayViewInlines.h:

(JSC::JSGenericTypedArrayView<Adaptor>::getOwnNonIndexPropertyNames):

  • runtime/JSLexicalEnvironment.cpp:

(JSC::JSLexicalEnvironment::getOwnNonIndexPropertyNames):

  • runtime/JSONObject.cpp:

(JSC::Stringifier::Holder::appendNextProperty):
(JSC::Walker::walk):

  • runtime/JSObject.cpp:

(JSC::getClassPropertyNames):
(JSC::JSObject::getOwnPropertyNames):
(JSC::JSObject::getOwnNonIndexPropertyNames):
(JSC::JSObject::getGenericPropertyNames):

  • runtime/JSPropertyNameEnumerator.h:

(JSC::propertyNameEnumerator):

  • runtime/JSSymbolTableObject.cpp:

(JSC::JSSymbolTableObject::getOwnNonIndexPropertyNames):

  • runtime/ObjectConstructor.cpp:

(JSC::objectConstructorGetOwnPropertyNames):
(JSC::objectConstructorKeys):
(JSC::defineProperties):
(JSC::objectConstructorSeal):
(JSC::objectConstructorFreeze):
(JSC::objectConstructorIsSealed):
(JSC::objectConstructorIsFrozen):

  • runtime/RegExpObject.cpp:

(JSC::RegExpObject::getOwnNonIndexPropertyNames):
(JSC::RegExpObject::getPropertyNames):
(JSC::RegExpObject::getGenericPropertyNames):

  • runtime/StringObject.cpp:

(JSC::StringObject::getOwnPropertyNames):

  • runtime/Structure.cpp:

(JSC::Structure::getPropertyNamesFromStructure):

Source/WebCore:

Use default EnumerationMode().

  • bindings/js/Dictionary.cpp:

(WebCore::Dictionary::getOwnPropertiesAsStringHashMap):
(WebCore::Dictionary::getOwnPropertyNames):

  • bindings/js/SerializedScriptValue.cpp:

(WebCore::CloneSerializer::serialize):

  • bindings/scripts/CodeGeneratorJS.pm:

(GenerateHeader):

  • bindings/scripts/test/JS/JSFloat64Array.h:
  • bindings/scripts/test/JS/JSTestEventTarget.h:
  • bridge/NP_jsobject.cpp:

(_NPN_Enumerate):

  • bridge/runtime_array.cpp:

(JSC::RuntimeArray::getOwnPropertyNames):

Source/WebKit/mac:

Use default EnumerationMode().

  • Plugins/Hosted/NetscapePluginInstanceProxy.mm:

(WebKit::NetscapePluginInstanceProxy::enumerate):

Source/WebKit2:

Use default EnumerationMode().

  • WebProcess/Plugins/Netscape/NPJSObject.cpp:

(WebKit::NPJSObject::enumerate):

Location:
trunk/Source
Files:
35 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/API/JSCallbackObjectFunctions.h

    r182205 r182280  
    522522                StringImpl* name = it->key.get();
    523523                StaticValueEntry* entry = it->value.get();
    524                 if (entry->getProperty && (!(entry->attributes & kJSPropertyAttributeDontEnum) || shouldIncludeDontEnumProperties(mode))) {
     524                if (entry->getProperty && (!(entry->attributes & kJSPropertyAttributeDontEnum) || mode.includeDontEnumProperties())) {
    525525                    ASSERT(!name->isSymbol());
    526526                    propertyNames.add(Identifier::fromString(exec, String(name)));
     
    535535                StringImpl* name = it->key.get();
    536536                StaticFunctionEntry* entry = it->value.get();
    537                 if (!(entry->attributes & kJSPropertyAttributeDontEnum) || shouldIncludeDontEnumProperties(mode)) {
     537                if (!(entry->attributes & kJSPropertyAttributeDontEnum) || mode.includeDontEnumProperties()) {
    538538                    ASSERT(!name->isSymbol());
    539539                    propertyNames.add(Identifier::fromString(exec, String(name)));
  • trunk/Source/JavaScriptCore/API/JSObjectRef.cpp

    r182205 r182280  
    699699    JSPropertyNameArrayRef propertyNames = new OpaqueJSPropertyNameArray(vm);
    700700    PropertyNameArray array(vm);
    701     jsObject->methodTable()->getPropertyNames(jsObject, exec, array, ExcludeDontEnumProperties);
     701    jsObject->methodTable()->getPropertyNames(jsObject, exec, array, EnumerationMode());
    702702
    703703    size_t size = array.size();
  • trunk/Source/JavaScriptCore/ChangeLog

    r182243 r182280  
     12015-04-02  Yusuke Suzuki  <utatane.tea@gmail.com>
     2
     3        Clean up EnumerationMode to easily extend
     4        https://bugs.webkit.org/show_bug.cgi?id=143276
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        To make the followings easily,
     9        1. Adding new flag Include/ExcludeSymbols in the Object.getOwnPropertySymbols patch
     10        2. Make ExcludeSymbols implicitly default for the existing flags
     11        we encapsulate EnumerationMode flags into EnumerationMode class.
     12
     13        And this class manages 2 flags. Later it will be extended to 3.
     14        1. DontEnumPropertiesMode (default is Exclude)
     15        2. JSObjectPropertiesMode (default is Include)
     16        3. SymbolPropertiesMode (default is Exclude)
     17            SymbolPropertiesMode will be added in Object.getOwnPropertySymbols patch.
     18
     19        This patch replaces places using ExcludeDontEnumProperties
     20        to EnumerationMode() value which represents default mode.
     21
     22        * API/JSCallbackObjectFunctions.h:
     23        (JSC::JSCallbackObject<Parent>::getOwnNonIndexPropertyNames):
     24        * API/JSObjectRef.cpp:
     25        (JSObjectCopyPropertyNames):
     26        * bindings/ScriptValue.cpp:
     27        (Deprecated::jsToInspectorValue):
     28        * bytecode/ObjectAllocationProfile.h:
     29        (JSC::ObjectAllocationProfile::possibleDefaultPropertyCount):
     30        * runtime/ArrayPrototype.cpp:
     31        (JSC::arrayProtoFuncSort):
     32        * runtime/EnumerationMode.h:
     33        (JSC::EnumerationMode::EnumerationMode):
     34        (JSC::EnumerationMode::includeDontEnumProperties):
     35        (JSC::EnumerationMode::includeJSObjectProperties):
     36        (JSC::shouldIncludeDontEnumProperties): Deleted.
     37        (JSC::shouldExcludeDontEnumProperties): Deleted.
     38        (JSC::shouldIncludeJSObjectPropertyNames): Deleted.
     39        (JSC::modeThatSkipsJSObject): Deleted.
     40        * runtime/GenericArgumentsInlines.h:
     41        (JSC::GenericArguments<Type>::getOwnPropertyNames):
     42        * runtime/JSArray.cpp:
     43        (JSC::JSArray::getOwnNonIndexPropertyNames):
     44        * runtime/JSArrayBuffer.cpp:
     45        (JSC::JSArrayBuffer::getOwnNonIndexPropertyNames):
     46        * runtime/JSArrayBufferView.cpp:
     47        (JSC::JSArrayBufferView::getOwnNonIndexPropertyNames):
     48        * runtime/JSFunction.cpp:
     49        (JSC::JSFunction::getOwnNonIndexPropertyNames):
     50        * runtime/JSFunction.h:
     51        * runtime/JSGenericTypedArrayViewInlines.h:
     52        (JSC::JSGenericTypedArrayView<Adaptor>::getOwnNonIndexPropertyNames):
     53        * runtime/JSLexicalEnvironment.cpp:
     54        (JSC::JSLexicalEnvironment::getOwnNonIndexPropertyNames):
     55        * runtime/JSONObject.cpp:
     56        (JSC::Stringifier::Holder::appendNextProperty):
     57        (JSC::Walker::walk):
     58        * runtime/JSObject.cpp:
     59        (JSC::getClassPropertyNames):
     60        (JSC::JSObject::getOwnPropertyNames):
     61        (JSC::JSObject::getOwnNonIndexPropertyNames):
     62        (JSC::JSObject::getGenericPropertyNames):
     63        * runtime/JSPropertyNameEnumerator.h:
     64        (JSC::propertyNameEnumerator):
     65        * runtime/JSSymbolTableObject.cpp:
     66        (JSC::JSSymbolTableObject::getOwnNonIndexPropertyNames):
     67        * runtime/ObjectConstructor.cpp:
     68        (JSC::objectConstructorGetOwnPropertyNames):
     69        (JSC::objectConstructorKeys):
     70        (JSC::defineProperties):
     71        (JSC::objectConstructorSeal):
     72        (JSC::objectConstructorFreeze):
     73        (JSC::objectConstructorIsSealed):
     74        (JSC::objectConstructorIsFrozen):
     75        * runtime/RegExpObject.cpp:
     76        (JSC::RegExpObject::getOwnNonIndexPropertyNames):
     77        (JSC::RegExpObject::getPropertyNames):
     78        (JSC::RegExpObject::getGenericPropertyNames):
     79        * runtime/StringObject.cpp:
     80        (JSC::StringObject::getOwnPropertyNames):
     81        * runtime/Structure.cpp:
     82        (JSC::Structure::getPropertyNamesFromStructure):
     83
    1842015-04-01  Alex Christensen  <achristensen@webkit.org>
    285
  • trunk/Source/JavaScriptCore/bindings/ScriptValue.cpp

    r178820 r182280  
    138138        JSObject* object = value.getObject();
    139139        PropertyNameArray propertyNames(scriptState);
    140         object->methodTable()->getOwnPropertyNames(object, scriptState, propertyNames, ExcludeDontEnumProperties);
     140        object->methodTable()->getOwnPropertyNames(object, scriptState, propertyNames, EnumerationMode());
    141141        for (size_t i = 0; i < propertyNames.size(); i++) {
    142142            const Identifier& name = propertyNames[i];
  • trunk/Source/JavaScriptCore/bytecode/ObjectAllocationProfile.h

    r148696 r182280  
    119119        size_t count = 0;
    120120        PropertyNameArray propertyNameArray(&vm);
    121         prototype->structure()->getPropertyNamesFromStructure(vm, propertyNameArray, ExcludeDontEnumProperties);
     121        prototype->structure()->getPropertyNamesFromStructure(vm, propertyNameArray, EnumerationMode());
    122122        PropertyNameArrayData::PropertyNameVector& propertyNameVector = propertyNameArray.data()->propertyNameVector();
    123123        for (size_t i = 0; i < propertyNameVector.size(); ++i) {
  • trunk/Source/JavaScriptCore/runtime/ArrayPrototype.cpp

    r182225 r182280  
    754754   
    755755    PropertyNameArray nameArray(exec);
    756     thisObj->methodTable(exec->vm())->getPropertyNames(thisObj, exec, nameArray, IncludeDontEnumProperties);
     756    thisObj->methodTable(exec->vm())->getPropertyNames(thisObj, exec, nameArray, EnumerationMode(DontEnumPropertiesMode::Include));
    757757    if (exec->hadException())
    758758        return JSValue::encode(jsUndefined());
  • trunk/Source/JavaScriptCore/runtime/EnumerationMode.h

    r172196 r182280  
    2929namespace JSC {
    3030
    31 enum EnumerationMode {
    32     ExcludeDontEnumProperties,
    33     ExcludeDontEnumPropertiesAndSkipJSObject,
    34     IncludeDontEnumProperties,
    35     IncludeDontEnumPropertiesAndSkipJSObject
     31enum class DontEnumPropertiesMode {
     32    Include,
     33    Exclude
    3634};
    3735
    38 inline bool shouldIncludeDontEnumProperties(EnumerationMode mode)
    39 {
    40     switch (mode) {
    41     case IncludeDontEnumProperties:
    42     case IncludeDontEnumPropertiesAndSkipJSObject:
    43         return true;
    44     default:
    45         return false;
     36enum class JSObjectPropertiesMode {
     37    Include,
     38    Exclude
     39};
     40
     41class EnumerationMode {
     42public:
     43    EnumerationMode(DontEnumPropertiesMode dontEnumPropertiesMode = DontEnumPropertiesMode::Exclude, JSObjectPropertiesMode jsObjectPropertiesMode = JSObjectPropertiesMode::Include)
     44        : m_dontEnumPropertiesMode(dontEnumPropertiesMode)
     45        , m_jsObjectPropertiesMode(jsObjectPropertiesMode)
     46    {
    4647    }
    47 }
    4848
    49 inline bool shouldExcludeDontEnumProperties(EnumerationMode mode)
    50 {
    51     switch (mode) {
    52     case ExcludeDontEnumProperties:
    53     case ExcludeDontEnumPropertiesAndSkipJSObject:
    54         return true;
    55     default:
    56         return false;
     49    EnumerationMode(const EnumerationMode& mode, JSObjectPropertiesMode jsObjectPropertiesMode)
     50        : m_dontEnumPropertiesMode(mode.m_dontEnumPropertiesMode)
     51        , m_jsObjectPropertiesMode(jsObjectPropertiesMode)
     52    {
    5753    }
    58 }
    5954
    60 inline bool shouldIncludeJSObjectPropertyNames(EnumerationMode mode)
    61 {
    62     switch (mode) {
    63     case IncludeDontEnumProperties:
    64     case ExcludeDontEnumProperties:
    65         return true;
    66     case ExcludeDontEnumPropertiesAndSkipJSObject:
    67     case IncludeDontEnumPropertiesAndSkipJSObject:
    68         return false;
     55    // Add other constructors as needed for convenience
     56
     57    bool includeDontEnumProperties()
     58    {
     59        return m_dontEnumPropertiesMode == DontEnumPropertiesMode::Include;
    6960    }
    70     ASSERT_NOT_REACHED();
    71     return false;
    72 }
    7361
    74 inline EnumerationMode modeThatSkipsJSObject(EnumerationMode mode)
    75 {
    76     switch (mode) {
    77     case IncludeDontEnumProperties:
    78         return IncludeDontEnumPropertiesAndSkipJSObject;
    79     case ExcludeDontEnumProperties:
    80         return ExcludeDontEnumPropertiesAndSkipJSObject;
    81     case ExcludeDontEnumPropertiesAndSkipJSObject:
    82     case IncludeDontEnumPropertiesAndSkipJSObject:
    83         return mode;
     62    bool includeJSObjectProperties()
     63    {
     64        return m_jsObjectPropertiesMode == JSObjectPropertiesMode::Include;
    8465    }
    85     ASSERT_NOT_REACHED();
    86     return mode;
    87 }
     66
     67private:
     68    DontEnumPropertiesMode m_dontEnumPropertiesMode;
     69    JSObjectPropertiesMode m_jsObjectPropertiesMode;
     70};
    8871
    8972} // namespace JSC
  • trunk/Source/JavaScriptCore/runtime/GenericArgumentsInlines.h

    r182205 r182280  
    9292        array.add(Identifier::from(exec, i));
    9393    }
    94     if (shouldIncludeDontEnumProperties(mode) && !thisObject->overrodeThings()) {
     94    if (mode.includeDontEnumProperties() && !thisObject->overrodeThings()) {
    9595        array.add(exec->propertyNames().callee);
    9696        array.add(exec->propertyNames().length);
  • trunk/Source/JavaScriptCore/runtime/JSArray.cpp

    r179887 r182280  
    227227    JSArray* thisObject = jsCast<JSArray*>(object);
    228228
    229     if (shouldIncludeDontEnumProperties(mode))
     229    if (mode.includeDontEnumProperties())
    230230        propertyNames.add(exec->propertyNames().length);
    231231
  • trunk/Source/JavaScriptCore/runtime/JSArrayBuffer.cpp

    r172176 r182280  
    120120    JSArrayBuffer* thisObject = jsCast<JSArrayBuffer*>(object);
    121121   
    122     if (shouldIncludeDontEnumProperties(mode))
     122    if (mode.includeDontEnumProperties())
    123123        array.add(exec->propertyNames().byteLength);
    124124   
  • trunk/Source/JavaScriptCore/runtime/JSArrayBufferView.cpp

    r181407 r182280  
    202202   
    203203    // length/byteOffset/byteLength are DontEnum, at least in Firefox.
    204     if (shouldIncludeDontEnumProperties(mode)) {
     204    if (mode.includeDontEnumProperties()) {
    205205        array.add(exec->propertyNames().byteOffset);
    206206        array.add(exec->propertyNames().byteLength);
  • trunk/Source/JavaScriptCore/runtime/JSFunction.cpp

    r181993 r182280  
    370370{
    371371    JSFunction* thisObject = jsCast<JSFunction*>(object);
    372     if (!thisObject->isHostOrBuiltinFunction() && shouldIncludeDontEnumProperties(mode)) {
     372    if (!thisObject->isHostOrBuiltinFunction() && mode.includeDontEnumProperties()) {
    373373        VM& vm = exec->vm();
    374374        // Make sure prototype has been reified.
  • trunk/Source/JavaScriptCore/runtime/JSFunction.h

    r182047 r182280  
    140140
    141141    static bool getOwnPropertySlot(JSObject*, ExecState*, PropertyName, PropertySlot&);
    142     static void getOwnNonIndexPropertyNames(JSObject*, ExecState*, PropertyNameArray&, EnumerationMode = ExcludeDontEnumProperties);
     142    static void getOwnNonIndexPropertyNames(JSObject*, ExecState*, PropertyNameArray&, EnumerationMode = EnumerationMode());
    143143    static bool defineOwnProperty(JSObject*, ExecState*, PropertyName, const PropertyDescriptor&, bool shouldThrow);
    144144
  • trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewInlines.h

    r181407 r182280  
    416416    JSGenericTypedArrayView* thisObject = jsCast<JSGenericTypedArrayView*>(object);
    417417   
    418     if (shouldIncludeDontEnumProperties(mode))
     418    if (mode.includeDontEnumProperties())
    419419        array.add(exec->propertyNames().length);
    420420   
  • trunk/Source/JavaScriptCore/runtime/JSLexicalEnvironment.cpp

    r182205 r182280  
    109109        SymbolTable::Map::iterator end = thisObject->symbolTable()->end(locker);
    110110        for (SymbolTable::Map::iterator it = thisObject->symbolTable()->begin(locker); it != end; ++it) {
    111             if (it->value.getAttributes() & DontEnum && !shouldIncludeDontEnumProperties(mode))
     111            if (it->value.getAttributes() & DontEnum && !mode.includeDontEnumProperties())
    112112                continue;
    113113            if (!thisObject->isValid(it->value.scopeOffset()))
  • trunk/Source/JavaScriptCore/runtime/JSONObject.cpp

    r180894 r182280  
    491491            else {
    492492                PropertyNameArray objectPropertyNames(exec);
    493                 m_object->methodTable()->getOwnPropertyNames(m_object.get(), exec, objectPropertyNames, ExcludeDontEnumProperties);
     493                m_object->methodTable()->getOwnPropertyNames(m_object.get(), exec, objectPropertyNames, EnumerationMode());
    494494                m_propertyNames = objectPropertyNames.releaseData();
    495495            }
     
    708708                indexStack.append(0);
    709709                propertyStack.append(PropertyNameArray(m_exec));
    710                 object->methodTable()->getOwnPropertyNames(object, m_exec, propertyStack.last(), ExcludeDontEnumProperties);
     710                object->methodTable()->getOwnPropertyNames(object, m_exec, propertyStack.last(), EnumerationMode());
    711711            }
    712712            objectStartVisitMember:
  • trunk/Source/JavaScriptCore/runtime/JSObject.cpp

    r182205 r182280  
    7979
    8080        for (auto iter = table->begin(); iter != table->end(); ++iter) {
    81             if ((!(iter->attributes() & DontEnum) || shouldIncludeDontEnumProperties(mode)) && !((iter->attributes() & BuiltinOrFunction) && didReify))
     81            if ((!(iter->attributes() & DontEnum) || mode.includeDontEnumProperties()) && !((iter->attributes() & BuiltinOrFunction) && didReify))
    8282                propertyNames.add(Identifier::fromString(&vm, iter.key()));
    8383        }
     
    15191519void JSObject::getOwnPropertyNames(JSObject* object, ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode)
    15201520{
    1521     if (!shouldIncludeJSObjectPropertyNames(mode)) {
     1521    if (!mode.includeJSObjectProperties()) {
    15221522        // We still have to get non-indexed properties from any subclasses of JSObject that have them.
    15231523        object->methodTable(exec->vm())->getOwnNonIndexPropertyNames(object, exec, propertyNames, mode);
     
    15731573            SparseArrayValueMap::const_iterator end = map->end();
    15741574            for (SparseArrayValueMap::const_iterator it = map->begin(); it != end; ++it) {
    1575                 if (shouldIncludeDontEnumProperties(mode) || !(it->value.attributes & DontEnum))
     1575                if (mode.includeDontEnumProperties() || !(it->value.attributes & DontEnum))
    15761576                    keys.uncheckedAppend(static_cast<unsigned>(it->key));
    15771577            }
     
    15951595    getClassPropertyNames(exec, object->classInfo(), propertyNames, mode, object->staticFunctionsReified());
    15961596
    1597     if (!shouldIncludeJSObjectPropertyNames(mode))
     1597    if (!mode.includeJSObjectProperties())
    15981598        return;
    15991599   
     
    28012801{
    28022802    VM& vm = exec->vm();
    2803     object->methodTable(vm)->getOwnPropertyNames(object, exec, propertyNames, modeThatSkipsJSObject(mode));
     2803    object->methodTable(vm)->getOwnPropertyNames(object, exec, propertyNames, EnumerationMode(mode, JSObjectPropertiesMode::Exclude));
    28042804
    28052805    if (object->prototype().isNull())
  • trunk/Source/JavaScriptCore/runtime/JSPropertyNameEnumerator.h

    r181891 r182280  
    127127
    128128    if (structure->canAccessPropertiesQuickly() && indexedLength == base->getArrayLength()) {
    129         base->methodTable(vm)->getStructurePropertyNames(base, exec, propertyNames, ExcludeDontEnumProperties);
     129        base->methodTable(vm)->getStructurePropertyNames(base, exec, propertyNames, EnumerationMode());
    130130
    131131        numberStructureProperties = propertyNames.size();
    132132
    133         base->methodTable(vm)->getGenericPropertyNames(base, exec, propertyNames, ExcludeDontEnumProperties);
     133        base->methodTable(vm)->getGenericPropertyNames(base, exec, propertyNames, EnumerationMode());
    134134    } else
    135         base->methodTable(vm)->getPropertyNames(base, exec, propertyNames, ExcludeDontEnumProperties);
     135        base->methodTable(vm)->getPropertyNames(base, exec, propertyNames, EnumerationMode());
    136136
    137137    ASSERT(propertyNames.size() < UINT32_MAX);
  • trunk/Source/JavaScriptCore/runtime/JSSymbolTableObject.cpp

    r182205 r182280  
    6464            if (it->key->isSymbol())
    6565                continue;
    66             if (!(it->value.getAttributes() & DontEnum) || shouldIncludeDontEnumProperties(mode))
     66            if (!(it->value.getAttributes() & DontEnum) || mode.includeDontEnumProperties())
    6767                propertyNames.add(Identifier::fromUid(exec, it->key.get()));
    6868        }
  • trunk/Source/JavaScriptCore/runtime/ObjectConstructor.cpp

    r182205 r182280  
    208208        return JSValue::encode(jsNull());
    209209    PropertyNameArray properties(exec);
    210     object->methodTable(exec->vm())->getOwnPropertyNames(object, exec, properties, IncludeDontEnumProperties);
     210    object->methodTable(exec->vm())->getOwnPropertyNames(object, exec, properties, EnumerationMode(DontEnumPropertiesMode::Include));
    211211    JSArray* names = constructEmptyArray(exec, 0);
    212212    size_t numProperties = properties.size();
     
    223223        return JSValue::encode(jsNull());
    224224    PropertyNameArray properties(exec);
    225     object->methodTable(exec->vm())->getOwnPropertyNames(object, exec, properties, ExcludeDontEnumProperties);
     225    object->methodTable(exec->vm())->getOwnPropertyNames(object, exec, properties, EnumerationMode());
    226226    JSArray* keys = constructEmptyArray(exec, 0);
    227227    size_t numProperties = properties.size();
     
    334334{
    335335    PropertyNameArray propertyNames(exec);
    336     asObject(properties)->methodTable(exec->vm())->getOwnPropertyNames(asObject(properties), exec, propertyNames, ExcludeDontEnumProperties);
     336    asObject(properties)->methodTable(exec->vm())->getOwnPropertyNames(asObject(properties), exec, propertyNames, EnumerationMode());
    337337    size_t numProperties = propertyNames.size();
    338338    Vector<PropertyDescriptor> descriptors;
     
    401401    // 2. For each named own property name P of O,
    402402    PropertyNameArray properties(exec);
    403     object->methodTable(exec->vm())->getOwnPropertyNames(object, exec, properties, IncludeDontEnumProperties);
     403    object->methodTable(exec->vm())->getOwnPropertyNames(object, exec, properties, EnumerationMode(DontEnumPropertiesMode::Include));
    404404    PropertyNameArray::const_iterator end = properties.end();
    405405    for (PropertyNameArray::const_iterator iter = properties.begin(); iter != end; ++iter) {
     
    438438    // 2. For each named own property name P of O,
    439439    PropertyNameArray properties(exec);
    440     object->methodTable(exec->vm())->getOwnPropertyNames(object, exec, properties, IncludeDontEnumProperties);
     440    object->methodTable(exec->vm())->getOwnPropertyNames(object, exec, properties, EnumerationMode(DontEnumPropertiesMode::Include));
    441441    PropertyNameArray::const_iterator end = properties.end();
    442442    for (PropertyNameArray::const_iterator iter = properties.begin(); iter != end; ++iter) {
     
    486486    // 2. For each named own property name P of O,
    487487    PropertyNameArray properties(exec);
    488     object->methodTable(exec->vm())->getOwnPropertyNames(object, exec, properties, IncludeDontEnumProperties);
     488    object->methodTable(exec->vm())->getOwnPropertyNames(object, exec, properties, EnumerationMode(DontEnumPropertiesMode::Include));
    489489    PropertyNameArray::const_iterator end = properties.end();
    490490    for (PropertyNameArray::const_iterator iter = properties.begin(); iter != end; ++iter) {
     
    516516    // 2. For each named own property name P of O,
    517517    PropertyNameArray properties(exec);
    518     object->methodTable(exec->vm())->getOwnPropertyNames(object, exec, properties, IncludeDontEnumProperties);
     518    object->methodTable(exec->vm())->getOwnPropertyNames(object, exec, properties, EnumerationMode(DontEnumPropertiesMode::Include));
    519519    PropertyNameArray::const_iterator end = properties.end();
    520520    for (PropertyNameArray::const_iterator iter = properties.begin(); iter != end; ++iter) {
  • trunk/Source/JavaScriptCore/runtime/RegExpObject.cpp

    r177222 r182280  
    106106void RegExpObject::getOwnNonIndexPropertyNames(JSObject* object, ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode)
    107107{
    108     if (shouldIncludeDontEnumProperties(mode))
     108    if (mode.includeDontEnumProperties())
    109109        propertyNames.add(exec->propertyNames().lastIndex);
    110110    Base::getOwnNonIndexPropertyNames(object, exec, propertyNames, mode);
     
    113113void RegExpObject::getPropertyNames(JSObject* object, ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode)
    114114{
    115     if (shouldIncludeDontEnumProperties(mode))
     115    if (mode.includeDontEnumProperties())
    116116        propertyNames.add(exec->propertyNames().lastIndex);
    117117    Base::getPropertyNames(object, exec, propertyNames, mode);
     
    120120void RegExpObject::getGenericPropertyNames(JSObject* object, ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode)
    121121{
    122     if (shouldIncludeDontEnumProperties(mode))
     122    if (mode.includeDontEnumProperties())
    123123        propertyNames.add(exec->propertyNames().lastIndex);
    124124    Base::getGenericPropertyNames(object, exec, propertyNames, mode);
  • trunk/Source/JavaScriptCore/runtime/StringObject.cpp

    r178928 r182280  
    151151    for (int i = 0; i < size; ++i)
    152152        propertyNames.add(Identifier::from(exec, i));
    153     if (shouldIncludeDontEnumProperties(mode))
     153    if (mode.includeDontEnumProperties())
    154154        propertyNames.add(exec->propertyNames().length);
    155155    return JSObject::getOwnPropertyNames(thisObject, exec, propertyNames, mode);
  • trunk/Source/JavaScriptCore/runtime/Structure.cpp

    r182205 r182280  
    940940    for (PropertyTable::iterator iter = propertyTable()->begin(); iter != end; ++iter) {
    941941        ASSERT(hasNonEnumerableProperties() || !(iter->attributes & DontEnum));
    942         if (!iter->key->isSymbol() && (!(iter->attributes & DontEnum) || shouldIncludeDontEnumProperties(mode))) {
     942        if (!iter->key->isSymbol() && (!(iter->attributes & DontEnum) || mode.includeDontEnumProperties())) {
    943943            if (knownUnique)
    944944                propertyNames.addKnownUnique(iter->key);
  • trunk/Source/WebCore/ChangeLog

    r182279 r182280  
     12015-04-02  Yusuke Suzuki  <utatane.tea@gmail.com>
     2
     3        Clean up EnumerationMode to easily extend
     4        https://bugs.webkit.org/show_bug.cgi?id=143276
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        Use default EnumerationMode().
     9
     10        * bindings/js/Dictionary.cpp:
     11        (WebCore::Dictionary::getOwnPropertiesAsStringHashMap):
     12        (WebCore::Dictionary::getOwnPropertyNames):
     13        * bindings/js/SerializedScriptValue.cpp:
     14        (WebCore::CloneSerializer::serialize):
     15        * bindings/scripts/CodeGeneratorJS.pm:
     16        (GenerateHeader):
     17        * bindings/scripts/test/JS/JSFloat64Array.h:
     18        * bindings/scripts/test/JS/JSTestEventTarget.h:
     19        * bridge/NP_jsobject.cpp:
     20        (_NPN_Enumerate):
     21        * bridge/runtime_array.cpp:
     22        (JSC::RuntimeArray::getOwnPropertyNames):
     23
    1242015-04-02  David Hyatt  <hyatt@apple.com>
    225
  • trunk/Source/WebCore/bindings/js/Dictionary.cpp

    r172876 r182280  
    6464
    6565    PropertyNameArray propertyNames(exec);
    66     JSObject::getOwnPropertyNames(object, exec, propertyNames, ExcludeDontEnumProperties);
     66    JSObject::getOwnPropertyNames(object, exec, propertyNames, EnumerationMode());
    6767    for (PropertyNameArray::const_iterator it = propertyNames.begin(); it != propertyNames.end(); ++it) {
    6868        String stringKey = it->string();
     
    8989
    9090    PropertyNameArray propertyNames(exec);
    91     JSObject::getOwnPropertyNames(object, exec, propertyNames, ExcludeDontEnumProperties);
     91    JSObject::getOwnPropertyNames(object, exec, propertyNames, EnumerationMode());
    9292    for (PropertyNameArray::const_iterator it = propertyNames.begin(); it != propertyNames.end(); ++it) {
    9393        String stringKey = it->string();
  • trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp

    r182205 r182280  
    12551255
    12561256                    propertyStack.append(PropertyNameArray(m_exec));
    1257                     array->methodTable()->getOwnNonIndexPropertyNames(array, m_exec, propertyStack.last(), ExcludeDontEnumProperties);
     1257                    array->methodTable()->getOwnNonIndexPropertyNames(array, m_exec, propertyStack.last(), EnumerationMode());
    12581258                    if (propertyStack.last().size()) {
    12591259                        write(NonIndexPropertiesTag);
     
    13051305                indexStack.append(0);
    13061306                propertyStack.append(PropertyNameArray(m_exec));
    1307                 inObject->methodTable()->getOwnPropertyNames(inObject, m_exec, propertyStack.last(), ExcludeDontEnumProperties);
     1307                inObject->methodTable()->getOwnPropertyNames(inObject, m_exec, propertyStack.last(), EnumerationMode());
    13081308            }
    13091309            objectStartVisitMember:
     
    13731373                    ASSERT(jsDynamicCast<JSMap*>(object));
    13741374                    propertyStack.append(PropertyNameArray(m_exec));
    1375                     object->methodTable()->getOwnPropertyNames(object, m_exec, propertyStack.last(), ExcludeDontEnumProperties);
     1375                    object->methodTable()->getOwnPropertyNames(object, m_exec, propertyStack.last(), EnumerationMode());
    13761376                    write(NonMapPropertiesTag);
    13771377                    indexStack.append(0);
     
    14171417                    ASSERT(jsDynamicCast<JSSet*>(object));
    14181418                    propertyStack.append(PropertyNameArray(m_exec));
    1419                     object->methodTable()->getOwnPropertyNames(object, m_exec, propertyStack.last(), ExcludeDontEnumProperties);
     1419                    object->methodTable()->getOwnPropertyNames(object, m_exec, propertyStack.last(), EnumerationMode());
    14201420                    write(NonSetPropertiesTag);
    14211421                    indexStack.append(0);
  • trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm

    r182205 r182280  
    969969    # Custom getPropertyNames function exists on DOMWindow
    970970    if ($interfaceName eq "DOMWindow") {
    971         push(@headerContent, "    static void getPropertyNames(JSC::JSObject*, JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode mode = JSC::ExcludeDontEnumProperties);\n");
    972         push(@headerContent, "    static void getGenericPropertyNames(JSC::JSObject*, JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode mode = JSC::ExcludeDontEnumProperties);\n");
    973         push(@headerContent, "    static void getStructurePropertyNames(JSC::JSObject*, JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode mode = JSC::ExcludeDontEnumProperties);\n");
     971        push(@headerContent, "    static void getPropertyNames(JSC::JSObject*, JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode = JSC::EnumerationMode());\n");
     972        push(@headerContent, "    static void getGenericPropertyNames(JSC::JSObject*, JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode = JSC::EnumerationMode());\n");
     973        push(@headerContent, "    static void getStructurePropertyNames(JSC::JSObject*, JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode = JSC::EnumerationMode());\n");
    974974        push(@headerContent, "    static uint32_t getEnumerableLength(JSC::ExecState*, JSC::JSObject*);\n");
    975975        $structureFlags{"JSC::OverridesGetPropertyNames"} = 1;
     
    978978    # Custom getOwnPropertyNames function
    979979    if ($interface->extendedAttributes->{"CustomEnumerateProperty"} || $indexedGetterFunction) {
    980         push(@headerContent, "    static void getOwnPropertyNames(JSC::JSObject*, JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode mode = JSC::ExcludeDontEnumProperties);\n");
     980        push(@headerContent, "    static void getOwnPropertyNames(JSC::JSObject*, JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode = JSC::EnumerationMode());\n");
    981981        $structureFlags{"JSC::OverridesGetPropertyNames"} = 1;       
    982982    }
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSFloat64Array.h

    r181508 r182280  
    5252    }
    5353
    54     static void getOwnPropertyNames(JSC::JSObject*, JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode mode = JSC::ExcludeDontEnumProperties);
     54    static void getOwnPropertyNames(JSC::JSObject*, JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode = JSC::EnumerationMode());
    5555    static JSC::JSValue getConstructor(JSC::ExecState*, JSC::JSGlobalObject*);
    5656    Float64Array* impl() const
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.h

    r181508 r182280  
    5454    }
    5555
    56     static void getOwnPropertyNames(JSC::JSObject*, JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode mode = JSC::ExcludeDontEnumProperties);
     56    static void getOwnPropertyNames(JSC::JSObject*, JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode = JSC::EnumerationMode());
    5757    static JSC::JSValue getConstructor(JSC::VM&, JSC::JSGlobalObject*);
    5858    static void visitChildren(JSCell*, JSC::SlotVisitor&);
  • trunk/Source/WebCore/bridge/NP_jsobject.cpp

    r177941 r182280  
    448448        PropertyNameArray propertyNames(exec);
    449449
    450         obj->imp->methodTable()->getPropertyNames(obj->imp, exec, propertyNames, ExcludeDontEnumProperties);
     450        obj->imp->methodTable()->getPropertyNames(obj->imp, exec, propertyNames, EnumerationMode());
    451451        unsigned size = static_cast<unsigned>(propertyNames.size());
    452452        // FIXME: This should really call NPN_MemAlloc but that's in WebKit
  • trunk/Source/WebCore/bridge/runtime_array.cpp

    r178928 r182280  
    7676        propertyNames.add(Identifier::from(exec, i));
    7777
    78     if (shouldIncludeDontEnumProperties(mode))
     78    if (mode.includeDontEnumProperties())
    7979        propertyNames.add(exec->propertyNames().length);
    8080
  • trunk/Source/WebKit/mac/ChangeLog

    r182242 r182280  
     12015-04-02  Yusuke Suzuki  <utatane.tea@gmail.com>
     2
     3        Clean up EnumerationMode to easily extend
     4        https://bugs.webkit.org/show_bug.cgi?id=143276
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        Use default EnumerationMode().
     9
     10        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
     11        (WebKit::NetscapePluginInstanceProxy::enumerate):
     12
    1132015-03-31  Simon Fraser  <simon.fraser@apple.com>
    214
  • trunk/Source/WebKit/mac/Plugins/Hosted/NetscapePluginInstanceProxy.mm

    r176459 r182280  
    12321232 
    12331233    PropertyNameArray propertyNames(exec);
    1234     object->methodTable()->getPropertyNames(object, exec, propertyNames, ExcludeDontEnumProperties);
     1234    object->methodTable()->getPropertyNames(object, exec, propertyNames, EnumerationMode());
    12351235
    12361236    RetainPtr<NSMutableArray*> array = adoptNS([[NSMutableArray alloc] init]);
  • trunk/Source/WebKit2/ChangeLog

    r182278 r182280  
     12015-04-02  Yusuke Suzuki  <utatane.tea@gmail.com>
     2
     3        Clean up EnumerationMode to easily extend
     4        https://bugs.webkit.org/show_bug.cgi?id=143276
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        Use default EnumerationMode().
     9
     10        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
     11        (WebKit::NPJSObject::enumerate):
     12
    1132015-04-02  Chris Dumez  <cdumez@apple.com>
    214
  • trunk/Source/WebKit2/WebProcess/Plugins/Netscape/NPJSObject.cpp

    r182205 r182280  
    241241
    242242    PropertyNameArray propertyNames(exec);
    243     m_jsObject->methodTable()->getPropertyNames(m_jsObject.get(), exec, propertyNames, ExcludeDontEnumProperties);
     243    m_jsObject->methodTable()->getPropertyNames(m_jsObject.get(), exec, propertyNames, EnumerationMode());
    244244
    245245    NPIdentifier* nameIdentifiers = npnMemNewArray<NPIdentifier>(propertyNames.size());
Note: See TracChangeset for help on using the changeset viewer.