这篇教程C++ DECLARE_THROW_SCOPE函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中DECLARE_THROW_SCOPE函数的典型用法代码示例。如果您正苦于以下问题:C++ DECLARE_THROW_SCOPE函数的具体用法?C++ DECLARE_THROW_SCOPE怎么用?C++ DECLARE_THROW_SCOPE使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了DECLARE_THROW_SCOPE函数的25个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: getDomainListstatic std::error_code getDomainList(ExecState& exec, const JSObject* arrayObject, Vector<String>& vector){ VM& vm = exec.vm(); auto scope = DECLARE_THROW_SCOPE(vm); ASSERT(vector.isEmpty()); if (!arrayObject || !isJSArray(arrayObject)) return ContentExtensionError::JSONInvalidDomainList; const JSArray* array = jsCast<const JSArray*>(arrayObject); unsigned length = array->length(); for (unsigned i = 0; i < length; ++i) { const JSValue value = array->getIndex(&exec, i); if (scope.exception() || !value.isString()) return ContentExtensionError::JSONInvalidDomainList; // Domains should be punycode encoded lower case. const String& domain = jsCast<JSString*>(value)->value(&exec); if (domain.isEmpty()) return ContentExtensionError::JSONInvalidDomainList; if (!containsOnlyASCIIWithNoUppercase(domain)) return ContentExtensionError::JSONDomainNotLowerCaseASCII; vector.append(domain); } return { };}
开发者ID:eocanha,项目名称:webkit,代码行数:26,
示例2: DECLARE_THROW_SCOPEbool JSLocation::getOwnPropertySlotDelegate(ExecState* exec, PropertyName propertyName, PropertySlot& slot){ VM& vm = exec->vm(); auto scope = DECLARE_THROW_SCOPE(vm); Frame* frame = wrapped().frame(); if (!frame) { slot.setUndefined(); return true; } // When accessing Location cross-domain, functions are always the native built-in ones. // See JSDOMWindow::getOwnPropertySlotDelegate for additional details. // Our custom code is only needed to implement the Window cross-domain scheme, so if access is // allowed, return false so the normal lookup will take place. String message; if (shouldAllowAccessToFrame(exec, frame, message)) return false; // We only allow access to Location.replace() cross origin. // Make it read-only / non-configurable to prevent writes via defineProperty. if (propertyName == exec->propertyNames().replace) { slot.setCustom(this, ReadOnly | DontDelete | DontEnum, nonCachingStaticFunctionGetter<jsLocationInstanceFunctionReplace, 1>); return true; } throwSecurityError(*exec, scope, message); slot.setUndefined(); return true;}
开发者ID:endlessm,项目名称:WebKit,代码行数:31,
示例3: DECLARE_THROW_SCOPEJSValue IntlNumberFormat::formatNumber(ExecState& state, double number){ VM& vm = state.vm(); auto scope = DECLARE_THROW_SCOPE(vm); // 11.3.4 FormatNumber abstract operation (ECMA-402 2.0) if (!m_initializedNumberFormat) return throwTypeError(&state, scope, "Intl.NumberFormat.prototype.format called on value that's not an object initialized as a NumberFormat"_s); // Map negative zero to positive zero. if (!number) number = 0.0; UErrorCode status = U_ZERO_ERROR; Vector<UChar, 32> buffer(32); auto length = unum_formatDouble(m_numberFormat.get(), number, buffer.data(), buffer.size(), nullptr, &status); if (status == U_BUFFER_OVERFLOW_ERROR) { buffer.grow(length); status = U_ZERO_ERROR; unum_formatDouble(m_numberFormat.get(), number, buffer.data(), length, nullptr, &status); } if (U_FAILURE(status)) return throwException(&state, scope, createError(&state, "Failed to format a number."_s)); return jsString(&state, String(buffer.data(), length));}
开发者ID:wolfviking0,项目名称:webcl-webkit,代码行数:26,
示例4: DECLARE_THROW_SCOPEbool JSDOMWindow::preventExtensions(JSObject*, ExecState* exec){ auto scope = DECLARE_THROW_SCOPE(exec->vm()); throwTypeError(exec, scope, ASCIILiteral("Cannot prevent extensions on this object")); return false;}
开发者ID:ollie314,项目名称:webkit,代码行数:7,
示例5: constructWeakSetstatic 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);}
开发者ID:mjparme,项目名称:openjdk-jfx,代码行数:30,
示例6: exportKeystatic void exportKey(ExecState& state, CryptoKeyFormat keyFormat, const CryptoKey& key, CryptoAlgorithm::VectorCallback callback, CryptoAlgorithm::VoidCallback failureCallback){ VM& vm = state.vm(); auto scope = DECLARE_THROW_SCOPE(vm); if (!key.extractable()) { throwTypeError(&state, scope, ASCIILiteral("Key is not extractable")); return; } switch (keyFormat) { case CryptoKeyFormat::Raw: { Vector<uint8_t> result; if (CryptoKeySerializationRaw::serialize(key, result)) callback(result); else failureCallback(); break; } case CryptoKeyFormat::JWK: { String result = JSCryptoKeySerializationJWK::serialize(&state, key); RETURN_IF_EXCEPTION(scope, void()); CString utf8String = result.utf8(StrictConversion); Vector<uint8_t> resultBuffer; resultBuffer.append(utf8String.data(), utf8String.length()); callback(resultBuffer); break; } default: throwTypeError(&state, scope, ASCIILiteral("Unsupported key format for export")); break; }}
开发者ID:caiolima,项目名称:webkit,代码行数:33,
示例7: DECLARE_THROW_SCOPEJSValue Database::toJS(ExecState* exec) const{ VM& vm = exec->vm(); auto scope = DECLARE_THROW_SCOPE(vm); JSObject* result = constructEmptyObject(exec); JSArray* bytecodes = constructEmptyArray(exec, 0); RETURN_IF_EXCEPTION(scope, JSValue()); for (unsigned i = 0; i < m_bytecodes.size(); ++i) bytecodes->putDirectIndex(exec, i, m_bytecodes[i].toJS(exec)); result->putDirect(vm, exec->propertyNames().bytecodes, bytecodes); JSArray* compilations = constructEmptyArray(exec, 0); RETURN_IF_EXCEPTION(scope, JSValue()); for (unsigned i = 0; i < m_compilations.size(); ++i) compilations->putDirectIndex(exec, i, m_compilations[i]->toJS(exec)); result->putDirect(vm, exec->propertyNames().compilations, compilations); JSArray* events = constructEmptyArray(exec, 0); RETURN_IF_EXCEPTION(scope, JSValue()); for (unsigned i = 0; i < m_events.size(); ++i) events->putDirectIndex(exec, i, m_events[i].toJS(exec)); result->putDirect(vm, exec->propertyNames().events, events); return result;}
开发者ID:ollie314,项目名称:webkit,代码行数:26,
示例8: webAssemblyModuleCustomSectionsEncodedJSValue JSC_HOST_CALL webAssemblyModuleCustomSections(ExecState* exec){ VM& vm = exec->vm(); auto* globalObject = exec->lexicalGlobalObject(); auto throwScope = DECLARE_THROW_SCOPE(vm); JSWebAssemblyModule* module = jsDynamicCast<JSWebAssemblyModule*>(vm, exec->argument(0)); if (!module) return JSValue::encode(throwException(exec, throwScope, createTypeError(exec, "WebAssembly.Module.customSections called with non WebAssembly.Module argument"_s))); const String sectionNameString = exec->argument(1).getString(exec); RETURN_IF_EXCEPTION(throwScope, { }); JSArray* result = constructEmptyArray(exec, nullptr, globalObject); RETURN_IF_EXCEPTION(throwScope, { }); const auto& customSections = module->moduleInformation().customSections; for (const Wasm::CustomSection& section : customSections) { if (String::fromUTF8(section.name) == sectionNameString) { auto buffer = ArrayBuffer::tryCreate(section.payload.data(), section.payload.size()); if (!buffer) return JSValue::encode(throwException(exec, throwScope, createOutOfMemoryError(exec))); result->push(exec, JSArrayBuffer::create(vm, globalObject->arrayBufferStructure(ArrayBufferSharingMode::Default), WTFMove(buffer))); RETURN_IF_EXCEPTION(throwScope, { }); } } return JSValue::encode(result);}
开发者ID:wolfviking0,项目名称:webcl-webkit,代码行数:30,
示例9: webAssemblyModuleImportsEncodedJSValue JSC_HOST_CALL webAssemblyModuleImports(ExecState* exec){ VM& vm = exec->vm(); auto* globalObject = exec->lexicalGlobalObject(); auto throwScope = DECLARE_THROW_SCOPE(vm); JSWebAssemblyModule* module = jsDynamicCast<JSWebAssemblyModule*>(vm, exec->argument(0)); if (!module) return JSValue::encode(throwException(exec, throwScope, createTypeError(exec, "WebAssembly.Module.imports called with non WebAssembly.Module argument"_s))); JSArray* result = constructEmptyArray(exec, nullptr, globalObject); RETURN_IF_EXCEPTION(throwScope, { }); const auto& imports = module->moduleInformation().imports; if (imports.size()) { Identifier module = Identifier::fromString(exec, "module"); Identifier name = Identifier::fromString(exec, "name"); Identifier kind = Identifier::fromString(exec, "kind"); for (const Wasm::Import& imp : imports) { JSObject* obj = constructEmptyObject(exec); RETURN_IF_EXCEPTION(throwScope, { }); obj->putDirect(vm, module, jsString(exec, String::fromUTF8(imp.module))); obj->putDirect(vm, name, jsString(exec, String::fromUTF8(imp.field))); obj->putDirect(vm, kind, jsString(exec, String(makeString(imp.kind)))); result->push(exec, obj); RETURN_IF_EXCEPTION(throwScope, { }); } } return JSValue::encode(result);}
开发者ID:wolfviking0,项目名称:webcl-webkit,代码行数:31,
示例10: constructJSWorkerEncodedJSValue JSC_HOST_CALL constructJSWorker(ExecState& exec){ VM& vm = exec.vm(); auto scope = DECLARE_THROW_SCOPE(vm); DOMConstructorObject* jsConstructor = jsCast<DOMConstructorObject*>(exec.callee()); if (!exec.argumentCount()) return throwVMError(&exec, scope, createNotEnoughArgumentsError(&exec)); String scriptURL = exec.uncheckedArgument(0).toWTFString(&exec); if (exec.hadException()) return JSValue::encode(JSValue()); // See section 4.8.2 step 14 of WebWorkers for why this is the lexicalGlobalObject. DOMWindow& window = asJSDOMWindow(exec.lexicalGlobalObject())->wrapped(); ExceptionCode ec = 0; ASSERT(window.document()); RefPtr<Worker> worker = Worker::create(*window.document(), scriptURL, ec); if (ec) { setDOMException(&exec, ec); return JSValue::encode(JSValue()); } return JSValue::encode(toJSNewlyCreated(&exec, jsConstructor->globalObject(), WTFMove(worker)));}
开发者ID:endlessm,项目名称:WebKit,代码行数:27,
示例11: lockJSValue ScriptFunctionCall::call(bool& hadException){ JSObject* thisObject = m_thisObject.jsObject(); VM& vm = m_exec->vm(); JSLockHolder lock(vm); auto scope = DECLARE_THROW_SCOPE(vm); JSValue function = thisObject->get(m_exec, Identifier::fromString(m_exec, m_name)); if (UNLIKELY(scope.exception())) { hadException = true; return { }; } CallData callData; CallType callType = getCallData(function, callData); if (callType == CallType::None) return { }; JSValue result; NakedPtr<Exception> exception; if (m_callHandler) result = m_callHandler(m_exec, function, callType, callData, thisObject, m_arguments, exception); else result = JSC::call(m_exec, function, callType, callData, thisObject, m_arguments, exception); if (exception) { // Do not treat a terminated execution exception as having an exception. Just treat it as an empty result. hadException = !isTerminatedExecutionException(exception); return { }; } return result;}
开发者ID:eocanha,项目名称:webkit,代码行数:34,
示例12: constructArrayBufferstatic EncodedJSValue JSC_HOST_CALL constructArrayBuffer(ExecState* exec){ VM& vm = exec->vm(); auto scope = DECLARE_THROW_SCOPE(vm); JSArrayBufferConstructor* constructor = jsCast<JSArrayBufferConstructor*>(exec->jsCallee()); unsigned length; if (exec->argumentCount()) { length = exec->uncheckedArgument(0).toIndex(exec, "length"); RETURN_IF_EXCEPTION(scope, encodedJSValue()); } else { // Although the documentation doesn't say so, it is in fact correct to say // "new ArrayBuffer()". The result is the same as allocating an array buffer // with a zero length. length = 0; } auto buffer = ArrayBuffer::tryCreate(length, 1); if (!buffer) return JSValue::encode(throwOutOfMemoryError(exec, scope)); if (constructor->sharingMode() == ArrayBufferSharingMode::Shared) buffer->makeShared(); ASSERT(constructor->sharingMode() == buffer->sharingMode()); Structure* arrayBufferStructure = InternalFunction::createSubclassStructure(exec, exec->newTarget(), constructor->globalObject()->arrayBufferStructure(constructor->sharingMode())); RETURN_IF_EXCEPTION(scope, encodedJSValue()); JSArrayBuffer* result = JSArrayBuffer::create(vm, arrayBufferStructure, WTFMove(buffer)); return JSValue::encode(result);}
开发者ID:caiolima,项目名称:webkit,代码行数:34,
示例13: getTypeFlagsstatic std::error_code getTypeFlags(ExecState& exec, const JSValue& typeValue, ResourceFlags& flags, uint16_t (*stringToType)(const String&)){ VM& vm = exec.vm(); auto scope = DECLARE_THROW_SCOPE(vm); if (!typeValue.isObject()) return { }; const JSObject* object = typeValue.toObject(&exec); ASSERT(!scope.exception()); if (!isJSArray(object)) return ContentExtensionError::JSONInvalidTriggerFlagsArray; const JSArray* array = jsCast<const JSArray*>(object); unsigned length = array->length(); for (unsigned i = 0; i < length; ++i) { const JSValue value = array->getIndex(&exec, i); if (scope.exception() || !value) return ContentExtensionError::JSONInvalidObjectInTriggerFlagsArray; String name = value.toWTFString(&exec); uint16_t type = stringToType(name); if (!type) return ContentExtensionError::JSONInvalidStringInTriggerFlagsArray; flags |= type; } return { };}
开发者ID:eocanha,项目名称:webkit,代码行数:31,
示例14: callHTMLAllCollection// HTMLAllCollections are strange objects, they support both get and call.static EncodedJSValue JSC_HOST_CALL callHTMLAllCollection(ExecState* exec){ VM& vm = exec->vm(); auto scope = DECLARE_THROW_SCOPE(vm); if (exec->argumentCount() < 1) return JSValue::encode(jsUndefined()); // Do not use thisObj here. It can be the JSHTMLDocument, in the document.forms(i) case. JSHTMLAllCollection* jsCollection = jsCast<JSHTMLAllCollection*>(exec->callee()); HTMLAllCollection& collection = jsCollection->wrapped(); // Also, do we need the TypeError test here ? if (exec->argumentCount() == 1) { // Support for document.all(<index>) etc. String string = exec->argument(0).toString(exec)->value(exec); RETURN_IF_EXCEPTION(scope, encodedJSValue()); if (Optional<uint32_t> index = parseIndex(*string.impl())) return JSValue::encode(toJS(exec, jsCollection->globalObject(), collection.item(index.value()))); // Support for document.images('<name>') etc. return JSValue::encode(namedItems(*exec, jsCollection, Identifier::fromString(exec, string))); } // The second arg, if set, is the index of the item we want String string = exec->argument(0).toString(exec)->value(exec); RETURN_IF_EXCEPTION(scope, encodedJSValue()); if (Optional<uint32_t> index = parseIndex(*exec->argument(1).toWTFString(exec).impl())) { if (auto* item = collection.namedItemWithIndex(string, index.value())) return JSValue::encode(toJS(exec, jsCollection->globalObject(), *item)); } return JSValue::encode(jsUndefined());}
开发者ID:ollie314,项目名称:webkit,代码行数:36,
示例15: DECLARE_THROW_SCOPEJSValue JSWebKitSubtleCrypto::digest(ExecState& state){ VM& vm = state.vm(); auto scope = DECLARE_THROW_SCOPE(vm); if (state.argumentCount() < 2) return throwException(&state, scope, createNotEnoughArgumentsError(&state)); auto algorithm = createAlgorithmFromJSValue(state, scope, state.uncheckedArgument(0)); RETURN_IF_EXCEPTION(scope, { }); auto parameters = JSCryptoAlgorithmDictionary::createParametersForDigest(state, scope, algorithm->identifier(), state.uncheckedArgument(0)); RETURN_IF_EXCEPTION(scope, { }); auto data = cryptoOperationDataFromJSValue(state, scope, state.uncheckedArgument(1)); RETURN_IF_EXCEPTION(scope, { }); RefPtr<DeferredPromise> wrapper = createDeferredPromise(state, domWindow()); auto promise = wrapper->promise(); auto successCallback = [wrapper](const Vector<uint8_t>& result) mutable { fulfillPromiseWithArrayBuffer(wrapper.releaseNonNull(), result.data(), result.size()); }; auto failureCallback = [wrapper]() mutable { wrapper->reject(); // FIXME: This should reject with an Exception. }; auto result = algorithm->digest(*parameters, data, WTFMove(successCallback), WTFMove(failureCallback)); if (result.hasException()) { propagateException(state, scope, result.releaseException()); return { }; } return promise;}
开发者ID:caiolima,项目名称:webkit,代码行数:34,
示例16: IntlCollatorPrototypeGetterCompareEncodedJSValue JSC_HOST_CALL IntlCollatorPrototypeGetterCompare(ExecState* state){ VM& vm = state->vm(); auto scope = DECLARE_THROW_SCOPE(vm); // 10.3.3 Intl.Collator.prototype.compare (ECMA-402 2.0) // 1. Let collator be this Collator object. IntlCollator* collator = jsDynamicCast<IntlCollator*>(state->thisValue()); if (!collator) return JSValue::encode(throwTypeError(state, scope, ASCIILiteral("Intl.Collator.prototype.compare called on value that's not an object initialized as a Collator"))); JSBoundFunction* boundCompare = collator->boundCompare(); // 2. If collator.[[boundCompare]] is undefined, if (!boundCompare) { JSGlobalObject* globalObject = collator->globalObject(); // a. Let F be a new built-in function object as defined in 11.3.4. // b. The value of F’s length property is 2. JSFunction* targetObject = JSFunction::create(vm, globalObject, 2, ASCIILiteral("compare"), IntlCollatorFuncCompare, NoIntrinsic); // c. Let bc be BoundFunctionCreate(F, C++ DECLARE_WAITQUEUE函数代码示例 C++ DECLARE_COMPLETION_ONSTACK函数代码示例
|