JSPropertyNameIterator* JSPropertyNameIterator::create(ExecState* exec, Structure* structure, JSObject* iteratedObject)
{
    JSPropertyNameEnumerator* enumerator = propertyNameEnumerator(exec, iteratedObject);
    if (UNLIKELY(exec->hadException()))
        return nullptr;
    return JSPropertyNameIterator::create(exec, structure, iteratedObject, enumerator);
}
JSPropertyNameIterator* JSPropertyNameIterator::create(ExecState* exec, Structure* structure, JSObject* iteratedObject)
{
    VM& vm = exec->vm();
    auto scope = DECLARE_THROW_SCOPE(vm);
    JSPropertyNameEnumerator* enumerator = propertyNameEnumerator(exec, iteratedObject);
    RETURN_IF_EXCEPTION(scope, nullptr);
    return JSPropertyNameIterator::create(exec, structure, iteratedObject, enumerator);
}