void JSHTMLOptionsCollection::setLength(ExecState* exec, JSValue value) { HTMLOptionsCollection* imp = static_cast<HTMLOptionsCollection*>(impl()); ExceptionCode ec = 0; unsigned newLength = 0; double lengthValue = value.toNumber(exec); if (!isnan(lengthValue) && !isinf(lengthValue)) { if (lengthValue < 0.0) ec = INDEX_SIZE_ERR; else if (lengthValue > static_cast<double>(UINT_MAX)) newLength = UINT_MAX; else newLength = static_cast<unsigned>(lengthValue); } if (!ec) imp->setLength(newLength, ec); setDOMException(exec, ec); }
void V8HTMLOptionsCollection::lengthAttrSetterCustom(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<void>& info) { HTMLOptionsCollection* imp = V8HTMLOptionsCollection::toNative(info.Holder()); double v = value->NumberValue(); unsigned newLength = 0; ExceptionCode ec = 0; if (!std::isnan(v) && !std::isinf(v)) { if (v < 0.0) ec = INDEX_SIZE_ERR; else if (v > static_cast<double>(UINT_MAX)) newLength = UINT_MAX; else newLength = static_cast<unsigned>(v); } if (!ec) imp->setLength(newLength, ec); setDOMException(ec, info.GetIsolate()); }
void V8HTMLOptionsCollection::lengthAccessorSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info) { INC_STATS("DOM.HTMLOptionsCollection.length._set"); HTMLOptionsCollection* imp = V8HTMLOptionsCollection::toNative(info.Holder()); double v = value->NumberValue(); unsigned newLength = 0; ExceptionCode ec = 0; if (!isnan(v) && !isinf(v)) { if (v < 0.0) ec = INDEX_SIZE_ERR; else if (v > static_cast<double>(UINT_MAX)) newLength = UINT_MAX; else newLength = static_cast<unsigned>(v); } if (!ec) imp->setLength(newLength, ec); setDOMException(ec, info.GetIsolate()); }
void V8HTMLOptionsCollection::lengthAttributeSetterCustom(v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<void>& info) { HTMLOptionsCollection* imp = V8HTMLOptionsCollection::toNative(info.Holder()); double v = value->NumberValue(); unsigned newLength = 0; ExceptionState exceptionState(ExceptionState::SetterContext, "length", "HTMLOptionsCollection", info.Holder(), info.GetIsolate()); if (!std::isnan(v) && !std::isinf(v)) { if (v < 0.0) exceptionState.throwDOMException(IndexSizeError, "The value provided (" + String::number(v) + ") is negative. Lengths must be greater than or equal to 0."); else if (v > static_cast<double>(UINT_MAX)) newLength = UINT_MAX; else newLength = static_cast<unsigned>(v); } if (exceptionState.throwIfNeeded()) return; imp->setLength(newLength, exceptionState); }