static EncodedJSValue JSC_HOST_CALL constructHTMLOptionElement(ExecState* exec) { JSOptionConstructor* jsConstructor = static_cast<JSOptionConstructor*>(exec->callee()); Document* document = jsConstructor->document(); if (!document) return throwVMError(exec, createReferenceError(exec, "Option constructor associated document is unavailable")); String data; if ((exec->argumentCount() >= 1) && !exec->argument(0).isUndefined()) data = ustringToString(exec->argument(0).toString(exec)); String value; if ((exec->argumentCount() >= 2) && !exec->argument(1).isUndefined()) value = ustringToString(exec->argument(1).toString(exec)); bool defaultSelected = (exec->argumentCount() >= 3) && exec->argument(2).toBoolean(exec); bool selected = (exec->argumentCount() >= 4) && exec->argument(3).toBoolean(exec); ExceptionCode ec = 0; RefPtr<HTMLOptionElement> element = HTMLOptionElement::createForJSConstructor(document, data, value, defaultSelected, selected, ec); if (ec) { setDOMException(exec, ec); return JSValue::encode(JSValue()); } return JSValue::encode(asObject(toJS(exec, jsConstructor->globalObject(), element.release()))); }
static JSObject* constructHTMLOptionElement(ExecState* exec, JSObject* constructor, const ArgList& args) { JSOptionConstructor* jsConstructor = static_cast<JSOptionConstructor*>(constructor); Document* document = jsConstructor->document(); if (!document) return throwError(exec, ReferenceError, "Option constructor associated document is unavailable"); RefPtr<HTMLOptionElement> element = static_pointer_cast<HTMLOptionElement>(document->createElement(HTMLNames::optionTag, false)); ExceptionCode ec = 0; RefPtr<Text> text = document->createTextNode(""); if (!args.at(0).isUndefined()) text->setData(args.at(0).toString(exec), ec); if (ec == 0) element->appendChild(text.release(), ec); if (ec == 0 && !args.at(1).isUndefined()) element->setValue(args.at(1).toString(exec)); if (ec == 0) element->setDefaultSelected(args.at(2).toBoolean(exec)); if (ec == 0) element->setSelected(args.at(3).toBoolean(exec)); if (ec) { setDOMException(exec, ec); return 0; } return asObject(toJS(exec, jsConstructor->globalObject(), element.release())); }