void JSArray::getOwnNonIndexPropertyNames(JSObject* object, ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode) { JSArray* thisObject = jsCast<JSArray*>(object); if (mode.includeDontEnumProperties()) propertyNames.add(exec->propertyNames().length); JSObject::getOwnNonIndexPropertyNames(thisObject, exec, propertyNames, mode); }
void JSTestOverrideBuiltins::getOwnPropertyNames(JSObject* object, ExecState* state, PropertyNameArray& propertyNames, EnumerationMode mode) { auto* thisObject = jsCast<JSTestOverrideBuiltins*>(object); ASSERT_GC_OBJECT_INHERITS(thisObject, info()); if (mode.includeDontEnumProperties()) { for (auto& propertyName : thisObject->impl().supportedPropertyNames()) propertyNames.add(Identifier::fromString(state, propertyName)); } Base::getOwnPropertyNames(thisObject, state, propertyNames, mode); }
void JSDOMWindow::getOwnPropertyNames(JSObject* object, ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode) { JSDOMWindow* thisObject = jsCast<JSDOMWindow*>(object); if (!BindingSecurity::shouldAllowAccessToDOMWindow(exec, thisObject->wrapped(), DoNotReportSecurityError)) { if (mode.includeDontEnumProperties()) addCrossOriginWindowPropertyNames(*exec, propertyNames); return; } Base::getOwnPropertyNames(thisObject, exec, propertyNames, mode); }
void JSArrayBuffer::getOwnNonIndexPropertyNames( JSObject* object, ExecState* exec, PropertyNameArray& array, EnumerationMode mode) { JSArrayBuffer* thisObject = jsCast<JSArrayBuffer*>(object); if (mode.includeDontEnumProperties()) array.add(exec->propertyNames().byteLength); Base::getOwnNonIndexPropertyNames(thisObject, exec, array, mode); }
void RuntimeArray::getOwnPropertyNames(JSObject* object, ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode) { RuntimeArray* thisObject = jsCast<RuntimeArray*>(object); unsigned length = thisObject->getLength(); for (unsigned i = 0; i < length; ++i) propertyNames.add(Identifier::from(exec, i)); if (mode.includeDontEnumProperties()) propertyNames.add(exec->propertyNames().length); JSObject::getOwnPropertyNames(thisObject, exec, propertyNames, mode); }
void JSTestEventTarget::getOwnPropertyNames(JSObject* object, ExecState* state, PropertyNameArray& propertyNames, EnumerationMode mode) { auto* thisObject = jsCast<JSTestEventTarget*>(object); ASSERT_GC_OBJECT_INHERITS(thisObject, info()); for (unsigned i = 0, count = thisObject->wrapped().length(); i < count; ++i) propertyNames.add(Identifier::from(state, i)); if (mode.includeDontEnumProperties()) { for (auto& propertyName : thisObject->wrapped().supportedPropertyNames()) propertyNames.add(Identifier::fromString(state, propertyName)); } Base::getOwnPropertyNames(thisObject, state, propertyNames, mode); }
void StringObject::getOwnPropertyNames(JSObject* object, ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode) { StringObject* thisObject = jsCast<StringObject*>(object); if (propertyNames.includeStringProperties()) { int size = thisObject->internalValue()->length(); for (int i = 0; i < size; ++i) propertyNames.add(Identifier::from(exec, i)); } if (mode.includeDontEnumProperties()) propertyNames.add(exec->propertyNames().length); return JSObject::getOwnPropertyNames(thisObject, exec, propertyNames, mode); }
void JSArrayBufferView::getOwnNonIndexPropertyNames( JSObject* object, ExecState* exec, PropertyNameArray& array, EnumerationMode mode) { JSArrayBufferView* thisObject = jsCast<JSArrayBufferView*>(object); // length/byteOffset/byteLength are DontEnum, at least in Firefox. if (mode.includeDontEnumProperties()) { array.add(exec->propertyNames().byteOffset); array.add(exec->propertyNames().byteLength); array.add(exec->propertyNames().buffer); } Base::getOwnNonIndexPropertyNames(thisObject, exec, array, mode); }
void JSFunction::getOwnNonIndexPropertyNames(JSObject* object, ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode) { JSFunction* thisObject = jsCast<JSFunction*>(object); if (!thisObject->isHostOrBuiltinFunction() && mode.includeDontEnumProperties()) { VM& vm = exec->vm(); // Make sure prototype has been reified. PropertySlot slot(thisObject); thisObject->methodTable(vm)->getOwnPropertySlot(thisObject, exec, vm.propertyNames->prototype, slot); propertyNames.add(vm.propertyNames->arguments); propertyNames.add(vm.propertyNames->caller); propertyNames.add(vm.propertyNames->length); propertyNames.add(vm.propertyNames->name); } Base::getOwnNonIndexPropertyNames(thisObject, exec, propertyNames, mode); }
void JSSymbolTableObject::getOwnNonIndexPropertyNames(JSObject* object, ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode) { JSSymbolTableObject* thisObject = jsCast<JSSymbolTableObject*>(object); { ConcurrentJITLocker locker(thisObject->symbolTable()->m_lock); SymbolTable::Map::iterator end = thisObject->symbolTable()->end(locker); for (SymbolTable::Map::iterator it = thisObject->symbolTable()->begin(locker); it != end; ++it) { if (!(it->value.getAttributes() & DontEnum) || mode.includeDontEnumProperties()) { if (it->key->isSymbol() && !mode.includeSymbolProperties()) continue; propertyNames.add(Identifier::fromUid(exec, it->key.get())); } } } JSObject::getOwnNonIndexPropertyNames(thisObject, exec, propertyNames, mode); }
void JSLexicalEnvironment::getOwnNonIndexPropertyNames(JSObject* object, ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode) { JSLexicalEnvironment* thisObject = jsCast<JSLexicalEnvironment*>(object); { ConcurrentJITLocker locker(thisObject->symbolTable()->m_lock); SymbolTable::Map::iterator end = thisObject->symbolTable()->end(locker); for (SymbolTable::Map::iterator it = thisObject->symbolTable()->begin(locker); it != end; ++it) { if (it->value.getAttributes() & DontEnum && !mode.includeDontEnumProperties()) continue; if (!thisObject->isValid(it->value.scopeOffset())) continue; if (it->key->isSymbol() && !mode.includeSymbolProperties()) continue; propertyNames.add(Identifier::fromUid(exec, it->key.get())); } } // Skip the JSEnvironmentRecord implementation of getOwnNonIndexPropertyNames JSObject::getOwnNonIndexPropertyNames(thisObject, exec, propertyNames, mode); }
void RegExpObject::getGenericPropertyNames(JSObject* object, ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode) { if (mode.includeDontEnumProperties()) propertyNames.add(exec->propertyNames().lastIndex); Base::getGenericPropertyNames(object, exec, propertyNames, mode); }