// ECMA 15.2.2 static ALWAYS_INLINE JSObject* constructObject(ExecState* exec, const ArgList& args) { JSValue* arg = args.at(exec, 0); if (arg->isUndefinedOrNull()) return new (exec) JSObject(exec->lexicalGlobalObject()->objectPrototype()); return arg->toObject(exec); }
SpeculatedType speculationFromValue(JSValue value) { if (value.isEmpty()) return SpecEmpty; if (value.isInt32()) return SpecInt32; if (value.isDouble()) { double number = value.asNumber(); if (number == number) { int64_t asInt64 = static_cast<int64_t>(number); if (asInt64 == number && (asInt64 || !std::signbit(number)) && asInt64 < (static_cast<int64_t>(1) << 47) && asInt64 >= -(static_cast<int64_t>(1) << 47)) { return SpecInt48AsDouble; } return SpecNonIntAsDouble; } return SpecDoubleNaN; } if (value.isCell()) return speculationFromCell(value.asCell()); if (value.isBoolean()) return SpecBoolean; ASSERT(value.isUndefinedOrNull()); return SpecOther; }
EncodedJSValue JSC_HOST_CALL objectProtoFuncToString(ExecState* exec) { VM& vm = exec->vm(); JSValue thisValue = exec->thisValue().toThis(exec, StrictMode); if (thisValue.isUndefinedOrNull()) return JSValue::encode(thisValue.isUndefined() ? vm.smallStrings.undefinedObjectString() : vm.smallStrings.nullObjectString()); JSObject* thisObject = thisValue.toObject(exec); JSValue stringTag = thisObject->get(exec, exec->propertyNames().toStringTagSymbol); if (stringTag.isString()) { JSRopeString::RopeBuilder<RecordOverflow> ropeBuilder(vm); ropeBuilder.append(vm.smallStrings.objectStringStart()); ropeBuilder.append(jsCast<JSString*>(stringTag)); ropeBuilder.append(vm.smallStrings.singleCharacterString(']')); if(ropeBuilder.hasOverflowed()) return JSValue::encode(throwOutOfMemoryError(exec)); return JSValue::encode(ropeBuilder.release()); } JSString* result = thisObject->structure(vm)->objectToStringValue(); if (!result) { RefPtr<StringImpl> newString = WTF::tryMakeString("[object ", thisObject->methodTable(exec->vm())->className(thisObject), "]"); if (!newString) return JSValue::encode(throwOutOfMemoryError(exec)); result = jsNontrivialString(&vm, newString.release()); thisObject->structure(vm)->setObjectToStringValue(vm, result); } return JSValue::encode(result); }
JSValue JSXMLHttpRequest::send(ExecState* exec, const ArgList& args) { ExceptionCode ec = 0; if (args.isEmpty()) impl()->send(ec); else { JSValue val = args.at(0); if (val.isUndefinedOrNull()) impl()->send(ec); else if (val.inherits(&JSDocument::s_info)) impl()->send(toDocument(val), ec); else if (val.inherits(&JSBlob::s_info)) impl()->send(toBlob(val), ec); else impl()->send(val.toString(exec), ec); } int signedLineNumber; intptr_t sourceID; UString sourceURL; JSValue function; exec->interpreter()->retrieveLastCaller(exec, signedLineNumber, sourceID, sourceURL, function); impl()->setLastSendLineNumber(signedLineNumber >= 0 ? signedLineNumber : 0); impl()->setLastSendURL(sourceURL); setDOMException(exec, ec); return jsUndefined(); }
JSValue JSXMLHttpRequest::send(ExecState* exec) { InspectorInstrumentation::willSendXMLHttpRequest(impl().scriptExecutionContext(), impl().url()); ExceptionCode ec = 0; JSValue val = exec->argument(0); if (val.isUndefinedOrNull()) impl().send(ec); else if (val.inherits(JSDocument::info())) impl().send(toDocument(val), ec); else if (val.inherits(JSBlob::info())) impl().send(toBlob(val), ec); else if (val.inherits(JSDOMFormData::info())) impl().send(toDOMFormData(val), ec); else if (val.inherits(JSArrayBuffer::info())) impl().send(toArrayBuffer(val), ec); else if (val.inherits(JSArrayBufferView::info())) { RefPtr<ArrayBufferView> view = toArrayBufferView(val); impl().send(view.get(), ec); } else impl().send(val.toString(exec)->value(exec), ec); SendFunctor functor; exec->iterate(functor); impl().setLastSendLineNumber(functor.line()); impl().setLastSendURL(functor.url()); setDOMException(exec, ec); return jsUndefined(); }
JSValue JSXMLHttpRequest::send(ExecState* exec) { ExceptionCode ec = 0; if (!exec->argumentCount()) impl()->send(ec); else { JSValue val = exec->argument(0); if (val.isUndefinedOrNull()) impl()->send(ec); else if (val.inherits(&JSDocument::s_info)) impl()->send(toDocument(val), ec); else if (val.inherits(&JSBlob::s_info)) impl()->send(toBlob(val), ec); else if (val.inherits(&JSDOMFormData::s_info)) impl()->send(toDOMFormData(val), ec); else impl()->send(ustringToString(val.toString(exec)), ec); } int signedLineNumber; intptr_t sourceID; UString sourceURL; JSValue function; exec->interpreter()->retrieveLastCaller(exec, signedLineNumber, sourceID, sourceURL, function); impl()->setLastSendLineNumber(signedLineNumber >= 0 ? signedLineNumber : 0); impl()->setLastSendURL(ustringToString(sourceURL)); setDOMException(exec, ec); return jsUndefined(); }
JSValue evaluate(ExecState* exec, const SourceCode& source, JSValue thisValue, NakedPtr<Exception>& returnedException) { JSLockHolder lock(exec); RELEASE_ASSERT(exec->vm().atomicStringTable() == wtfThreadData().atomicStringTable()); RELEASE_ASSERT(!exec->vm().isCollectorBusy()); CodeProfiling profile(source); ProgramExecutable* program = ProgramExecutable::create(exec, source); if (!program) { returnedException = exec->vm().exception(); exec->vm().clearException(); return jsUndefined(); } if (!thisValue || thisValue.isUndefinedOrNull()) thisValue = exec->vmEntryGlobalObject(); JSObject* thisObj = jsCast<JSObject*>(thisValue.toThis(exec, NotStrictMode)); JSValue result = exec->interpreter()->execute(program, exec, thisObj); if (exec->hadException()) { returnedException = exec->exception(); exec->clearException(); return jsUndefined(); } RELEASE_ASSERT(result); return result; }
void fillMessagePortArray(JSC::ExecState* exec, JSC::JSValue value, MessagePortArray& portArray) { // Convert from the passed-in JS array-like object to a MessagePortArray. // Also validates the elements per sections 4.1.13 and 4.1.15 of the WebIDL spec and section 8.3.3 of the HTML5 spec. if (value.isUndefinedOrNull()) { portArray.resize(0); return; } // Validation of sequence types, per WebIDL spec 4.1.13. unsigned length; JSObject* object = toJSSequence(exec, value, length); if (exec->hadException()) return; portArray.resize(length); for (unsigned i = 0 ; i < length; ++i) { JSValue value = object->get(exec, i); if (exec->hadException()) return; // Validation of non-null objects, per HTML5 spec 8.3.3. if (value.isUndefinedOrNull()) { setDOMException(exec, INVALID_STATE_ERR); return; } // Validation of Objects implementing an interface, per WebIDL spec 4.1.15. RefPtr<MessagePort> port = toMessagePort(value); if (!port) { throwTypeError(exec); return; } portArray[i] = port.release(); } }
static EncodedJSValue JSC_HOST_CALL constructWeakSet(ExecState* exec) { VM& vm = exec->vm(); auto scope = DECLARE_THROW_SCOPE(vm); JSGlobalObject* globalObject = asInternalFunction(exec->jsCallee())->globalObject(); Structure* weakSetStructure = InternalFunction::createSubclassStructure(exec, exec->newTarget(), globalObject->weakSetStructure()); RETURN_IF_EXCEPTION(scope, encodedJSValue()); JSWeakSet* weakSet = JSWeakSet::create(exec, weakSetStructure); JSValue iterable = exec->argument(0); if (iterable.isUndefinedOrNull()) return JSValue::encode(weakSet); JSValue adderFunction = weakSet->JSObject::get(exec, vm.propertyNames->add); RETURN_IF_EXCEPTION(scope, encodedJSValue()); CallData adderFunctionCallData; CallType adderFunctionCallType = getCallData(adderFunction, adderFunctionCallData); if (adderFunctionCallType == CallType::None) return JSValue::encode(throwTypeError(exec, scope)); scope.release(); forEachInIterable(exec, iterable, [&](VM&, ExecState* exec, JSValue nextValue) { MarkedArgumentBuffer arguments; arguments.append(nextValue); call(exec, adderFunction, adderFunctionCallType, adderFunctionCallData, weakSet, arguments); }); return JSValue::encode(weakSet); }
static RefPtr<CryptoAlgorithmParameters> createRsaOaepParams(ExecState* exec, JSValue value) { if (!value.isObject()) { throwTypeError(exec); return nullptr; } JSDictionary jsDictionary(exec, value.getObject()); auto result = adoptRef(*new CryptoAlgorithmRsaOaepParams); if (!getHashAlgorithm(jsDictionary, result->hash, HashRequirement::Required)) { ASSERT(exec->hadException()); return nullptr; } JSValue labelValue = getProperty(exec, value.getObject(), "label"); if (exec->hadException()) return nullptr; result->hasLabel = !labelValue.isUndefinedOrNull(); if (!result->hasLabel) return WTFMove(result); CryptoOperationData labelData; if (!cryptoOperationDataFromJSValue(exec, labelValue, labelData)) { ASSERT(exec->hadException()); return nullptr; } result->label.append(labelData.first, labelData.second); return WTFMove(result); }
void JSDictionary::convertValue(ExecState* exec, JSValue value, ArrayValue& result) { if (value.isUndefinedOrNull()) return; result = ArrayValue(exec, value); }
Completion evaluate(ExecState* exec, ScopeChain& scopeChain, const SourceCode& source, JSValue thisValue) { //zyc /* ofstream out("fromCompletion.txt", ios::app); char *output = source.toString().ascii(); out<<output<<endl; out.close();*/ //done zyc //out.write(output.utf8().data(),output.utf8().length()); //out.write('\n',1); JSLock lock(exec); ASSERT(exec->globalData().identifierTable == wtfThreadData().currentIdentifierTable()); RefPtr<ProgramExecutable> program = ProgramExecutable::create(exec, source); JSObject* error = program->compile(exec, scopeChain.node()); if (error) return Completion(Throw, error); JSObject* thisObj = (!thisValue || thisValue.isUndefinedOrNull()) ? exec->dynamicGlobalObject() : thisValue.toObject(exec); JSValue exception; JSValue result = exec->interpreter()->execute(program.get(), exec, scopeChain.node(), thisObj, &exception); if (exception) { ComplType exceptionType = Throw; if (exception.isObject()) exceptionType = asObject(exception)->exceptionType(); return Completion(exceptionType, exception); } return Completion(Normal, result); }
EncodedJSValue JSC_HOST_CALL functionProtoFuncApply(ExecState* exec) { JSValue thisValue = exec->hostThisValue(); CallData callData; CallType callType = getCallData(thisValue, callData); if (callType == CallTypeNone) return throwVMTypeError(exec); JSValue array = exec->argument(1); MarkedArgumentBuffer applyArgs; if (!array.isUndefinedOrNull()) { if (!array.isObject()) return throwVMTypeError(exec); if (asObject(array)->classInfo() == &Arguments::s_info) { if (asArguments(array)->length(exec) > Arguments::MaxArguments) return JSValue::encode(throwStackOverflowError(exec)); asArguments(array)->fillArgList(exec, applyArgs); } else if (isJSArray(array)) { if (asArray(array)->length() > Arguments::MaxArguments) return JSValue::encode(throwStackOverflowError(exec)); asArray(array)->fillArgList(exec, applyArgs); } else { unsigned length = asObject(array)->get(exec, exec->propertyNames().length).toUInt32(exec); if (length > Arguments::MaxArguments) return JSValue::encode(throwStackOverflowError(exec)); for (unsigned i = 0; i < length; ++i) applyArgs.append(asObject(array)->get(exec, i)); } } return JSValue::encode(call(exec, thisValue, callType, callData, exec->argument(0), applyArgs)); }
Completion evaluate(ExecState* exec, ScopeChainNode* scopeChain, const SourceCode& source, JSValue thisValue) { JSLock lock(exec); ASSERT(exec->globalData().identifierTable == wtfThreadData().currentIdentifierTable()); ProgramExecutable* program = ProgramExecutable::create(exec, source); if (!program) { JSValue exception = exec->globalData().exception; exec->globalData().exception = JSValue(); return Completion(Throw, exception); } JSObject* thisObj = (!thisValue || thisValue.isUndefinedOrNull()) ? exec->dynamicGlobalObject() : thisValue.toObject(exec); JSValue result = exec->interpreter()->execute(program, exec, scopeChain, thisObj); if (exec->hadException()) { JSValue exception = exec->exception(); exec->clearException(); ComplType exceptionType = Throw; if (exception.isObject()) exceptionType = asObject(exception)->exceptionType(); return Completion(exceptionType, exception); } return Completion(Normal, result); }
JSValue JSXMLHttpRequest::send(ExecState& state) { InspectorInstrumentation::willSendXMLHttpRequest(wrapped().scriptExecutionContext(), wrapped().url()); ExceptionCode ec = 0; JSValue val = state.argument(0); if (val.isUndefinedOrNull()) wrapped().send(ec); else if (val.inherits(JSDocument::info())) wrapped().send(JSDocument::toWrapped(val), ec); else if (val.inherits(JSBlob::info())) wrapped().send(JSBlob::toWrapped(val), ec); else if (val.inherits(JSDOMFormData::info())) wrapped().send(JSDOMFormData::toWrapped(val), ec); else if (val.inherits(JSArrayBuffer::info())) wrapped().send(toArrayBuffer(val), ec); else if (val.inherits(JSArrayBufferView::info())) { RefPtr<ArrayBufferView> view = toArrayBufferView(val); wrapped().send(view.get(), ec); } else wrapped().send(val.toString(&state)->value(&state), ec); // FIXME: This should probably use ShadowChicken so that we get the right frame even when it did // a tail call. // https://bugs.webkit.org/show_bug.cgi?id=155688 SendFunctor functor; state.iterate(functor); wrapped().setLastSendLineAndColumnNumber(functor.line(), functor.column()); wrapped().setLastSendURL(functor.url()); setDOMException(&state, ec); return jsUndefined(); }
JSValue JSC_HOST_CALL functionProtoFuncApply(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args) { CallData callData; CallType callType = thisValue.getCallData(callData); if (callType == CallTypeNone) return throwError(exec, TypeError); JSValue array = args.at(1); MarkedArgumentBuffer applyArgs; if (!array.isUndefinedOrNull()) { if (!array.isObject()) return throwError(exec, TypeError); if (asObject(array)->classInfo() == &Arguments::info) asArguments(array)->fillArgList(exec, applyArgs); else if (isJSArray(&exec->globalData(), array)) asArray(array)->fillArgList(exec, applyArgs); else if (asObject(array)->inherits(&JSArray::info)) { unsigned length = asArray(array)->get(exec, exec->propertyNames().length).toUInt32(exec); for (unsigned i = 0; i < length; ++i) applyArgs.append(asArray(array)->get(exec, i)); } else return throwError(exec, TypeError); } return call(exec, thisValue, callType, callData, args.at(0), applyArgs); }
EncodedJSValue JSC_HOST_CALL JSKeyboardEventConstructor::constructJSKeyboardEvent(ExecState* exec) { JSKeyboardEventConstructor* jsConstructor = jsCast<JSKeyboardEventConstructor*>(exec->callee()); ScriptExecutionContext* executionContext = jsConstructor->scriptExecutionContext(); if (!executionContext) return throwVMError(exec, createReferenceError(exec, "Constructor associated execution context is unavailable")); AtomicString eventType = exec->argument(0).toString(exec)->value(exec); if (exec->hadException()) return JSValue::encode(jsUndefined()); KeyboardEventInit eventInit; JSValue initializerValue = exec->argument(1); if (!initializerValue.isUndefinedOrNull()) { // Given the above test, this will always yield an object. JSObject* initializerObject = initializerValue.toObject(exec); // Create the dictionary wrapper from the initializer object. JSDictionary dictionary(exec, initializerObject); // Attempt to fill in the EventInit. if (!fillKeyboardEventInit(eventInit, dictionary)) return JSValue::encode(jsUndefined()); } RefPtr<KeyboardEvent> event = KeyboardEvent::create(eventType, eventInit); return JSValue::encode(toJS(exec, jsConstructor->globalObject(), event.get())); }
JSValue evaluate(ExecState* exec, const SourceCode& source, JSValue thisValue, JSValue* returnedException) { JSLockHolder lock(exec); RELEASE_ASSERT(exec->vm().identifierTable == wtfThreadData().currentIdentifierTable()); RELEASE_ASSERT(!exec->vm().isCollectorBusy()); CodeProfiling profile(source); ProgramExecutable* program = ProgramExecutable::create(exec, source); if (!program) { if (returnedException) *returnedException = exec->vm().exception; exec->vm().exception = JSValue(); return jsUndefined(); } if (!thisValue || thisValue.isUndefinedOrNull()) thisValue = exec->dynamicGlobalObject(); JSObject* thisObj = thisValue.toThisObject(exec); JSValue result = exec->interpreter()->execute(program, exec, thisObj); if (exec->hadException()) { if (returnedException) *returnedException = exec->exception(); exec->clearException(); return jsUndefined(); } RELEASE_ASSERT(result); return result; }
static PassRefPtr<PositionOptions> createPositionOptions(ExecState* exec, JSValue value) { // Create default options. RefPtr<PositionOptions> options = PositionOptions::create(); // Argument is optional (hence undefined is allowed), and null is allowed. if (value.isUndefinedOrNull()) { // Use default options. return options.release(); } // Given the above test, this will always yield an object. JSObject* object = value.toObject(exec); // Create the dictionary wrapper from the initializer object. JSDictionary dictionary(exec, object); if (!dictionary.tryGetProperty("enableHighAccuracy", options.get(), setEnableHighAccuracy)) return 0; if (!dictionary.tryGetProperty("timeout", options.get(), setTimeout)) return 0; if (!dictionary.tryGetProperty("maximumAge", options.get(), setMaximumAge)) return 0; return options.release(); }
// ECMA 15.2.2 static ALWAYS_INLINE JSObject* constructObject(ExecState* exec, const ArgList& args) { JSValue arg = args.at(0); if (arg.isUndefinedOrNull()) return new (exec) JSObject(exec->lexicalGlobalObject()->emptyObjectStructure()); return arg.toObject(exec); }
JSValue evaluate(ExecState* exec, const SourceCode& source, JSValue thisValue, NakedPtr<Exception>& returnedException) { VM& vm = exec->vm(); JSLockHolder lock(vm); auto scope = DECLARE_CATCH_SCOPE(vm); RELEASE_ASSERT(vm.atomicStringTable() == wtfThreadData().atomicStringTable()); RELEASE_ASSERT(!vm.isCollectorBusyOnCurrentThread()); CodeProfiling profile(source); ProgramExecutable* program = ProgramExecutable::create(exec, source); ASSERT(scope.exception() || program); if (!program) { returnedException = scope.exception(); scope.clearException(); return jsUndefined(); } if (!thisValue || thisValue.isUndefinedOrNull()) thisValue = exec->vmEntryGlobalObject(); JSObject* thisObj = jsCast<JSObject*>(thisValue.toThis(exec, NotStrictMode)); JSValue result = exec->interpreter()->execute(program, exec, thisObj); if (scope.exception()) { returnedException = scope.exception(); scope.clearException(); return jsUndefined(); } RELEASE_ASSERT(result); return result; }
template<> EncodedJSValue JSC_HOST_CALL JSTestEventConstructorConstructor::construct(ExecState* state) { auto* jsConstructor = jsCast<JSTestEventConstructorConstructor*>(state->callee()); if (!jsConstructor->scriptExecutionContext()) return throwVMError(state, createReferenceError(state, "Constructor associated execution context is unavailable")); if (UNLIKELY(state->argumentCount() < 1)) return throwVMError(state, createNotEnoughArgumentsError(state)); AtomicString eventType = state->argument(0).toString(state)->toAtomicString(state); if (UNLIKELY(state->hadException())) return JSValue::encode(jsUndefined()); TestEventConstructorInit eventInit; JSValue initializerValue = state->argument(1); if (!initializerValue.isUndefinedOrNull()) { // Given the above test, this will always yield an object. JSObject* initializerObject = initializerValue.toObject(state); ASSERT(!state->hadException()); // Create the dictionary wrapper from the initializer object. JSDictionary dictionary(state, initializerObject); // Attempt to fill in the EventInit. if (!fillTestEventConstructorInit(eventInit, dictionary)) return JSValue::encode(jsUndefined()); } Ref<TestEventConstructor> event = TestEventConstructor::createForBindings(eventType, eventInit); return JSValue::encode(toJS(state, jsConstructor->globalObject(), event)); }
static EncodedJSValue JSC_HOST_CALL constructWeakSet(ExecState* exec) { JSGlobalObject* globalObject = asInternalFunction(exec->callee())->globalObject(); Structure* weakSetStructure = globalObject->weakSetStructure(); JSWeakSet* weakSet = JSWeakSet::create(exec, weakSetStructure); JSValue iterable = exec->argument(0); if (iterable.isUndefinedOrNull()) return JSValue::encode(weakSet); JSValue adderFunction = weakSet->JSObject::get(exec, exec->propertyNames().add); if (exec->hadException()) return JSValue::encode(jsUndefined()); CallData adderFunctionCallData; CallType adderFunctionCallType = getCallData(adderFunction, adderFunctionCallData); if (adderFunctionCallType == CallTypeNone) return JSValue::encode(throwTypeError(exec)); JSValue iteratorFunction = iterable.get(exec, exec->propertyNames().iteratorSymbol); if (exec->hadException()) return JSValue::encode(jsUndefined()); CallData iteratorFunctionCallData; CallType iteratorFunctionCallType = getCallData(iteratorFunction, iteratorFunctionCallData); if (iteratorFunctionCallType == CallTypeNone) return JSValue::encode(throwTypeError(exec)); ArgList iteratorFunctionArguments; JSValue iterator = call(exec, iteratorFunction, iteratorFunctionCallType, iteratorFunctionCallData, iterable, iteratorFunctionArguments); if (exec->hadException()) return JSValue::encode(jsUndefined()); if (!iterator.isObject()) return JSValue::encode(throwTypeError(exec)); while (true) { JSValue next = iteratorStep(exec, iterator); if (exec->hadException()) return JSValue::encode(jsUndefined()); if (next.isFalse()) return JSValue::encode(weakSet); JSValue nextValue = iteratorValue(exec, next); if (exec->hadException()) return JSValue::encode(jsUndefined()); MarkedArgumentBuffer arguments; arguments.append(nextValue); call(exec, adderFunction, adderFunctionCallType, adderFunctionCallData, weakSet, arguments); if (exec->hadException()) { iteratorClose(exec, iterator); return JSValue::encode(jsUndefined()); } } RELEASE_ASSERT_NOT_REACHED(); return JSValue::encode(weakSet); }
static ALWAYS_INLINE JSObject* constructObject(ExecState* exec) { JSGlobalObject* globalObject = exec->callee()->globalObject(); ArgList args(exec); JSValue arg = args.at(0); if (arg.isUndefinedOrNull()) return constructEmptyObject(exec, globalObject->objectPrototype()); return arg.toObject(exec, globalObject); }
EncodedJSValue JSC_HOST_CALL constructJSDataCue(ExecState* exec) { DOMConstructorObject* castedThis = jsCast<DOMConstructorObject*>(exec->callee()); if (exec->argumentCount() < 3) return throwVMError(exec, createNotEnoughArgumentsError(exec)); ExceptionCode ec = 0; double startTime(exec->argument(0).toNumber(exec)); if (UNLIKELY(exec->hadException())) return JSValue::encode(jsUndefined()); double endTime(exec->argument(1).toNumber(exec)); if (UNLIKELY(exec->hadException())) return JSValue::encode(jsUndefined()); ScriptExecutionContext* context = castedThis->scriptExecutionContext(); if (!context) return throwConstructorDocumentUnavailableError(*exec, "DataCue"); String type; #if ENABLE(DATACUE_VALUE) if (exec->argumentCount() > 3) { if (!exec->argument(3).isString()) return throwVMError(exec, createTypeError(exec, "Second argument of the constructor is not of type String")); type = exec->argument(3).getString(exec); } #endif JSValue valueArgument = exec->argument(2); if (valueArgument.isUndefinedOrNull()) { setDOMException(exec, TypeError); return JSValue::encode(JSValue()); } RefPtr<DataCue> object; if (valueArgument.isCell() && valueArgument.asCell()->inherits(std::remove_pointer<JSArrayBuffer*>::type::info())) { ArrayBuffer* data(toArrayBuffer(valueArgument)); if (UNLIKELY(exec->hadException())) return JSValue::encode(jsUndefined()); object = DataCue::create(*context, startTime, endTime, data, type, ec); if (ec) { setDOMException(exec, ec); return JSValue::encode(JSValue()); } return JSValue::encode(asObject(toJS(exec, castedThis->globalObject(), object.get()))); } #if !ENABLE(DATACUE_VALUE) return JSValue::encode(jsUndefined()); #else object = DataCue::create(*context, startTime, endTime, valueArgument, type); return JSValue::encode(asObject(toJS(exec, castedThis->globalObject(), object.get()))); #endif }
template<> DictionaryImplName convertDictionary<DictionaryImplName>(ExecState& state, JSValue value) { VM& vm = state.vm(); auto throwScope = DECLARE_THROW_SCOPE(vm); bool isNullOrUndefined = value.isUndefinedOrNull(); auto* object = isNullOrUndefined ? nullptr : value.getObject(); if (UNLIKELY(!isNullOrUndefined && !object)) { throwTypeError(&state, throwScope); return { }; } DictionaryImplName result; JSValue boolMemberValue; if (isNullOrUndefined) boolMemberValue = jsUndefined(); else { boolMemberValue = object->get(&state, Identifier::fromString(&state, "boolMember")); RETURN_IF_EXCEPTION(throwScope, { }); } if (!boolMemberValue.isUndefined()) { result.boolMember = convert<IDLBoolean>(state, boolMemberValue); RETURN_IF_EXCEPTION(throwScope, { }); } JSValue callbackMemberValue; if (isNullOrUndefined) callbackMemberValue = jsUndefined(); else { callbackMemberValue = object->get(&state, Identifier::fromString(&state, "callbackMember")); RETURN_IF_EXCEPTION(throwScope, { }); } if (!callbackMemberValue.isUndefined()) { result.callbackMember = convert<IDLCallbackFunction<JSVoidCallback>>(state, callbackMemberValue, *jsCast<JSDOMGlobalObject*>(state.lexicalGlobalObject())); RETURN_IF_EXCEPTION(throwScope, { }); } JSValue enumMemberValue; if (isNullOrUndefined) enumMemberValue = jsUndefined(); else { enumMemberValue = object->get(&state, Identifier::fromString(&state, "enumMember")); RETURN_IF_EXCEPTION(throwScope, { }); } if (!enumMemberValue.isUndefined()) { result.enumMember = convert<IDLEnumeration<TestStandaloneDictionary::EnumInStandaloneDictionaryFile>>(state, enumMemberValue); RETURN_IF_EXCEPTION(throwScope, { }); } JSValue stringMemberValue; if (isNullOrUndefined) stringMemberValue = jsUndefined(); else { stringMemberValue = object->get(&state, Identifier::fromString(&state, "stringMember")); RETURN_IF_EXCEPTION(throwScope, { }); } if (!stringMemberValue.isUndefined()) { result.stringMember = convert<IDLDOMString>(state, stringMemberValue); RETURN_IF_EXCEPTION(throwScope, { }); } return result; }
bool JSDictionary::getWithUndefinedOrNullCheck(const String& propertyName, String& result) const { ASSERT(isValid()); JSValue value; if (tryGetProperty(propertyName.utf8().data(), value) != PropertyFound || value.isUndefinedOrNull()) return false; result = value.toWTFString(m_exec); return true; }
ExceptionOr<Ref<JSCustomXPathNSResolver>> JSCustomXPathNSResolver::create(ExecState& state, JSValue value) { if (value.isUndefinedOrNull()) return Exception { TypeError }; auto* resolverObject = value.getObject(); if (!resolverObject) return Exception { TYPE_MISMATCH_ERR }; return adoptRef(*new JSCustomXPathNSResolver(state.vm(), resolverObject, asJSDOMWindow(state.vmEntryGlobalObject()))); }
PredictedType predictionFromValue(JSValue value) { if (value.isInt32()) return PredictInt32; if (value.isDouble()) return PredictDouble; if (value.isCell()) return predictionFromCell(value.asCell()); if (value.isBoolean()) return PredictBoolean; ASSERT(value.isUndefinedOrNull()); return PredictOther; }
PassRefPtr<JSCustomXPathNSResolver> JSCustomXPathNSResolver::create(ExecState* exec, JSValue value) { if (value.isUndefinedOrNull()) return 0; JSObject* resolverObject = value.getObject(); if (!resolverObject) { setDOMException(exec, TYPE_MISMATCH_ERR); return 0; } return adoptRef(new JSCustomXPathNSResolver(exec, resolverObject, asJSDOMWindow(exec->dynamicGlobalObject()))); }