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->isValidScopeOffset(it->value.scopeOffset())) continue; if (it->key->isSymbol() && !propertyNames.includeSymbolProperties()) continue; propertyNames.add(Identifier::fromUid(exec, it->key.get())); } } // Skip the JSEnvironmentRecord implementation of getOwnNonIndexPropertyNames JSObject::getOwnNonIndexPropertyNames(thisObject, exec, propertyNames, mode); }