本文整理汇总了C++中JSValue::getObject方法的典型用法代码示例。如果您正苦于以下问题:C++ JSValue::getObject方法的具体用法?C++ JSValue::getObject怎么用?C++ JSValue::getObject使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类JSValue
的用法示例。
在下文中一共展示了JSValue::getObject方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: jsDictionary
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);
}
示例2: move
static std::unique_ptr<CryptoAlgorithmParameters> createRsaKeyGenParams(ExecState* exec, JSValue value)
{
if (!value.isObject()) {
throwTypeError(exec);
return nullptr;
}
auto result = std::make_unique<CryptoAlgorithmRsaKeyGenParams>();
JSValue modulusLengthValue = getProperty(exec, value.getObject(), "modulusLength");
if (exec->hadException())
return nullptr;
// FIXME: Why no EnforceRange? Filed as <https://www.w3.org/Bugs/Public/show_bug.cgi?id=23779>.
result->modulusLength = toUInt32(exec, modulusLengthValue, NormalConversion);
if (exec->hadException())
return nullptr;
JSValue publicExponentValue = getProperty(exec, value.getObject(), "publicExponent");
if (exec->hadException())
return nullptr;
RefPtr<Uint8Array> publicExponentArray = toUint8Array(publicExponentValue);
if (!publicExponentArray) {
throwTypeError(exec, "Expected a Uint8Array in publicExponent");
return nullptr;
}
result->publicExponent.append(publicExponentArray->data(), publicExponentArray->byteLength());
return WTF::move(result);
}
示例3: rightValue
int JSPrintFunction::rightValue( JSScopeStack* , JSValue *rv, JSParameterListObject *_param )
{
// int ret = 0;
if ( _param )
{
JSValue *v;
for ( v = _param->firstValue(); v != 0L; v = _param->nextValue() )
{
if ( v->getObject()->isA() == TYPE_JSIntegerObject )
printf( "%i ", ((JSIntegerObject*)(v->getObject()))->getValue() );
else if ( v->getObject()->isA() == TYPE_JSStringObject )
printf( "%s ", ((JSStringObject*)(v->getObject()))->getString() );
else if ( v->getObject()->isA() == TYPE_JSBoolObject )
{
if ( ((JSBoolObject*)(v->getObject()))->getValue() )
printf( "TRUE " );
else
printf( "FALSE " );
}
else if ( v->getObject()->isA() == TYPE_JSFloatObject )
printf( "%f ", ((JSFloatObject*)(v->getObject()))->getValue() );
}
}
rv->setObject( new JSObject() );
rv->setAutoDelete( TRUE );
rv->setLeftValue( FALSE );
return 0;
}
示例4: rightValue
int JSDocumentWriteFunction::rightValue( JSScopeStack*, JSValue *rv, JSParameterListObject *_param )
{
int ret = 0;
QString out;
if ( _param )
{
JSValue *v;
int i = 0;
for ( v = _param->firstValue(); v != 0L; v = _param->nextValue() )
{
i++;
if ( i > 1 )
object->getJSWindowObject()->getJSEnvironment()->writeOutput( " " );
if ( v->getObject()->isA() == TYPE_JSIntegerObject )
{
out.sprintf("%i",((JSIntegerObject*)(v->getObject()))->getValue() );
object->getJSWindowObject()->getJSEnvironment()->writeOutput( out.data() );
//printf( "%i ", ((JSIntegerObject*)(v->getObject()))->getValue() );
}
else if ( v->getObject()->isA() == TYPE_JSStringObject )
{
out = ((JSStringObject*)(v->getObject()))->getString();
object->getJSWindowObject()->getJSEnvironment()->writeOutput( out.data() );
//printf( "%s ", ((JSStringObject*)(v->getObject()))->getString() );
}
else if ( v->getObject()->isA() == TYPE_JSBoolObject )
{
if ( ((JSBoolObject*)(v->getObject()))->getValue() )
{
out = "TRUE";
object->getJSWindowObject()->getJSEnvironment()->writeOutput( out.data() );
//printf( "TRUE " );
}
else
{
out = "FALSE";
object->getJSWindowObject()->getJSEnvironment()->writeOutput( out.data() );
//printf( "FALSE " );
}
}
else if ( v->getObject()->isA() == TYPE_JSFloatObject )
{
out.sprintf( "%f", ((JSFloatObject*)(v->getObject()))->getValue() );
object->getJSWindowObject()->getJSEnvironment()->writeOutput( out.data() );
//printf( "%f ", ((JSFloatObject*)(v->getObject()))->getValue() );
}
}
}
rv->setObject( new JSObject() );
rv->setAutoDelete( TRUE );
rv->setLeftValue( FALSE );
return ret;
}
示例5: WTFMove
static RefPtr<CryptoAlgorithmParameters> createAesCbcParams(ExecState* exec, JSValue value)
{
if (!value.isObject()) {
throwTypeError(exec);
return nullptr;
}
JSValue iv = getProperty(exec, value.getObject(), "iv");
if (exec->hadException())
return nullptr;
auto result = adoptRef(*new CryptoAlgorithmAesCbcParams);
CryptoOperationData ivData;
if (!cryptoOperationDataFromJSValue(exec, iv, ivData)) {
ASSERT(exec->hadException());
return nullptr;
}
if (ivData.second != 16) {
exec->vm().throwException(exec, createError(exec, "AES-CBC initialization data must be 16 bytes"));
return nullptr;
}
memcpy(result->iv.data(), ivData.first, ivData.second);
return WTFMove(result);
}
示例6: getBoundFunctionStructure
inline Structure* getBoundFunctionStructure(VM& vm, ExecState* exec, JSGlobalObject* globalObject, JSObject* targetFunction)
{
auto scope = DECLARE_THROW_SCOPE(vm);
JSValue prototype = targetFunction->getPrototype(vm, exec);
RETURN_IF_EXCEPTION(scope, nullptr);
JSFunction* targetJSFunction = jsDynamicCast<JSFunction*>(vm, targetFunction);
// We only cache the structure of the bound function if the bindee is a JSFunction since there
// isn't any good place to put the structure on Internal Functions.
if (targetJSFunction) {
Structure* structure = targetJSFunction->rareData(vm)->getBoundFunctionStructure();
if (structure && structure->storedPrototype() == prototype && structure->globalObject() == globalObject)
return structure;
}
Structure* result = globalObject->boundFunctionStructure();
// It would be nice if the structure map was keyed global objects in addition to the other things. Unfortunately, it is not
// currently. Whoever works on caching structure changes for prototype transistions should consider this problem as well.
// See: https://bugs.webkit.org/show_bug.cgi?id=152738
if (prototype.isObject() && prototype.getObject()->globalObject() == globalObject) {
result = vm.prototypeMap.emptyStructureForPrototypeFromBaseStructure(globalObject, prototype.getObject(), result);
ASSERT_WITH_SECURITY_IMPLICATION(result->globalObject() == globalObject);
} else
result = Structure::create(vm, globalObject, prototype, result->typeInfo(), result->classInfo());
if (targetJSFunction)
targetJSFunction->rareData(vm)->setBoundFunctionStructure(vm, result);
return result;
}
示例7: JSValueIsObjectOfClass
bool JSValueIsObjectOfClass(JSContextRef ctx, JSValueRef value, JSClassRef jsClass)
{
if (!ctx || !jsClass) {
ASSERT_NOT_REACHED();
return false;
}
ExecState* exec = toJS(ctx);
JSLockHolder locker(exec);
JSValue jsValue = toJS(exec, value);
if (JSObject* o = jsValue.getObject()) {
if (o->inherits(JSProxy::info()))
o = jsCast<JSProxy*>(o)->target();
if (o->inherits(JSCallbackObject<JSGlobalObject>::info()))
return jsCast<JSCallbackObject<JSGlobalObject>*>(o)->inherits(jsClass);
if (o->inherits(JSCallbackObject<JSDestructibleObject>::info()))
return jsCast<JSCallbackObject<JSDestructibleObject>*>(o)->inherits(jsClass);
#if JSC_OBJC_API_ENABLED
if (o->inherits(JSCallbackObject<JSAPIWrapperObject>::info()))
return jsCast<JSCallbackObject<JSAPIWrapperObject>*>(o)->inherits(jsClass);
#endif
}
return false;
}
示例8: iteratorForIterable
IterationRecord iteratorForIterable(ExecState* state, JSValue iterable)
{
VM& vm = state->vm();
auto scope = DECLARE_THROW_SCOPE(vm);
JSValue iteratorFunction = iterable.get(state, vm.propertyNames->iteratorSymbol);
RETURN_IF_EXCEPTION(scope, { });
CallData iteratorFunctionCallData;
CallType iteratorFunctionCallType = getCallData(vm, iteratorFunction, iteratorFunctionCallData);
if (iteratorFunctionCallType == CallType::None) {
throwTypeError(state, scope);
return { };
}
ArgList iteratorFunctionArguments;
JSValue iterator = call(state, iteratorFunction, iteratorFunctionCallType, iteratorFunctionCallData, iterable, iteratorFunctionArguments);
RETURN_IF_EXCEPTION(scope, { });
if (!iterator.isObject()) {
throwTypeError(state, scope);
return { };
}
JSValue nextMethod = iterator.getObject()->get(state, vm.propertyNames->next);
RETURN_IF_EXCEPTION(scope, { });
return { iterator, nextMethod };
}
示例9: constructJSHTMLElement
EncodedJSValue JSC_HOST_CALL constructJSHTMLElement(ExecState& exec)
{
auto* jsConstructor = jsCast<DOMConstructorObject*>(exec.callee());
auto* context = jsConstructor->scriptExecutionContext();
if (!is<Document>(context))
return throwConstructorDocumentUnavailableError(exec, "HTMLElement");
auto& document = downcast<Document>(*context);
auto* window = document.domWindow();
if (!window)
return throwVMTypeError(&exec, ASCIILiteral("new.target is not a valid custom element constructor"));
auto* registry = window->customElementsRegistry();
if (!registry)
return throwVMTypeError(&exec, ASCIILiteral("new.target is not a valid custom element constructor"));
VM& vm = exec.vm();
JSValue newTargetValue = exec.thisValue();
JSObject* newTarget = newTargetValue.getObject();
auto* elementInterface = registry->findInterface(newTarget);
if (!elementInterface)
return throwVMTypeError(&exec, ASCIILiteral("new.target does not define a custom element"));
if (!elementInterface->isUpgradingElement()) {
auto* globalObject = jsConstructor->globalObject();
Structure* baseStructure = getDOMStructure<JSHTMLElement>(vm, *globalObject);
auto* newElementStructure = InternalFunction::createSubclassStructure(&exec, newTargetValue, baseStructure);
if (UNLIKELY(exec.hadException()))
return JSValue::encode(jsUndefined());
Ref<HTMLElement> element = HTMLElement::create(elementInterface->name(), document);
element->setIsUnresolvedCustomElement();
auto* jsElement = JSHTMLElement::create(newElementStructure, globalObject, element.get());
cacheWrapper(globalObject->world(), element.ptr(), jsElement);
return JSValue::encode(jsElement);
}
Element* elementToUpgrade = elementInterface->lastElementInConstructionStack();
if (!elementToUpgrade) {
throwInvalidStateError(exec, ASCIILiteral("Cannot instantiate a custom element inside its own constrcutor during upgrades"));
return JSValue::encode(jsUndefined());
}
JSValue elementWrapperValue = toJS(&exec, jsConstructor->globalObject(), *elementToUpgrade);
ASSERT(elementWrapperValue.isObject());
JSValue newPrototype = newTarget->get(&exec, vm.propertyNames->prototype);
if (exec.hadException())
return JSValue::encode(jsUndefined());
JSObject* elementWrapperObject = asObject(elementWrapperValue);
JSObject::setPrototype(elementWrapperObject, &exec, newPrototype, true /* shouldThrowIfCantSet */);
if (exec.hadException())
return JSValue::encode(jsUndefined());
elementInterface->didUpgradeLastElementInConstructionStack();
return JSValue::encode(elementWrapperValue);
}
示例10: createInjectedScript
ScriptObject InjectedScriptManager::createInjectedScript(const String& source, ScriptState* scriptState, int id)
{
JSLockHolder lock(scriptState);
SourceCode sourceCode = makeSource(source);
JSDOMGlobalObject* globalObject = jsCast<JSDOMGlobalObject*>(scriptState->lexicalGlobalObject());
JSValue globalThisValue = scriptState->globalThisValue();
JSValue evaluationException;
JSValue evaluationReturnValue;
if (isMainThread())
evaluationReturnValue = JSMainThreadExecState::evaluate(scriptState, sourceCode, globalThisValue, &evaluationException);
else {
JSC::JSLockHolder lock(scriptState);
evaluationReturnValue = JSC::evaluate(scriptState, sourceCode, globalThisValue, &evaluationException);
}
if (evaluationException)
return ScriptObject();
JSValue functionValue = evaluationReturnValue;
CallData callData;
CallType callType = getCallData(functionValue, callData);
if (callType == CallTypeNone)
return ScriptObject();
MarkedArgumentBuffer args;
args.append(toJS(scriptState, globalObject, m_injectedScriptHost.get()));
args.append(globalThisValue);
args.append(jsNumber(id));
JSValue result = JSC::call(scriptState, functionValue, callType, callData, globalThisValue, args);
if (result.isObject())
return ScriptObject(scriptState, result.getObject());
return ScriptObject();
}
示例11: createInjectedScript
Deprecated::ScriptObject InjectedScriptManager::createInjectedScript(const String& source, ExecState* scriptState, int id)
{
JSLockHolder lock(scriptState);
SourceCode sourceCode = makeSource(source);
JSGlobalObject* globalObject = scriptState->lexicalGlobalObject();
JSValue globalThisValue = scriptState->globalThisValue();
NakedPtr<Exception> evaluationException;
InspectorEvaluateHandler evaluateHandler = m_environment.evaluateHandler();
JSValue functionValue = evaluateHandler(scriptState, sourceCode, globalThisValue, evaluationException);
if (evaluationException)
return Deprecated::ScriptObject();
CallData callData;
CallType callType = getCallData(functionValue, callData);
if (callType == CallTypeNone)
return Deprecated::ScriptObject();
MarkedArgumentBuffer args;
args.append(m_injectedScriptHost->wrapper(scriptState, globalObject));
args.append(globalThisValue);
args.append(jsNumber(id));
JSValue result = JSC::call(scriptState, functionValue, callType, callData, globalThisValue, args);
scriptState->clearException();
if (result.isObject())
return Deprecated::ScriptObject(scriptState, result.getObject());
return Deprecated::ScriptObject();
}
示例12: getContext
JSValue JSHTMLCanvasElement::getContext(ExecState* exec)
{
HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(impl());
const String& contextId = exec->argument(0).toString(exec)->value(exec);
RefPtr<CanvasContextAttributes> attrs;
#if ENABLE(WEBGL)
if (HTMLCanvasElement::is3dType(contextId)) {
get3DContextAttributes(exec, attrs);
if (exec->hadException())
return jsUndefined();
}
#endif
CanvasRenderingContext* context = canvas->getContext(contextId, attrs.get());
if (!context)
return jsNull();
JSValue jsValue = toJS(exec, globalObject(), WTF::getPtr(context));
if (InspectorInstrumentation::canvasAgentEnabled(canvas->document())) {
ScriptObject contextObject(exec, jsValue.getObject());
ScriptObject wrapped;
if (context->is2d())
wrapped = InspectorInstrumentation::wrapCanvas2DRenderingContextForInstrumentation(canvas->document(), contextObject);
#if ENABLE(WEBGL)
else if (context->is3d())
wrapped = InspectorInstrumentation::wrapWebGLRenderingContextForInstrumentation(canvas->document(), contextObject);
#endif
if (!wrapped.hasNoValue())
return wrapped.jsValue();
}
return jsValue;
}
示例13: encode
static EncodedJSValue JSC_HOST_CALL typedArrayViewProtoGetterFuncToStringTag(ExecState* exec)
{
JSValue thisValue = exec->thisValue();
if (!thisValue.isObject())
return JSValue::encode(jsUndefined());
VM& vm = exec->vm();
switch (thisValue.getObject()->classInfo()->typedArrayStorageType) {
case TypeUint8Clamped:
return JSValue::encode(jsString(&vm, "Uint8ClampedArray"));
case TypeInt32:
return JSValue::encode(jsString(&vm, "Int32Array"));
case TypeUint32:
return JSValue::encode(jsString(&vm, "Uint32Array"));
case TypeFloat64:
return JSValue::encode(jsString(&vm, "Float64Array"));
case TypeFloat32:
return JSValue::encode(jsString(&vm, "Float32Array"));
case TypeInt8:
return JSValue::encode(jsString(&vm, "Int8Array"));
case TypeUint8:
return JSValue::encode(jsString(&vm, "Uint8Array"));
case TypeInt16:
return JSValue::encode(jsString(&vm, "Int16Array"));
case TypeUint16:
return JSValue::encode(jsString(&vm, "Uint16Array"));
case NotTypedArray:
case TypeDataView:
return JSValue::encode(jsUndefined());
}
RELEASE_ASSERT_NOT_REACHED();
}
示例14: createInjectedScript
ScriptObject InjectedScriptHost::createInjectedScript(const String& source, ScriptState* scriptState, long id)
{
SourceCode sourceCode = makeSource(stringToUString(source));
JSLock lock(SilenceAssertionsOnly);
JSDOMGlobalObject* globalObject = static_cast<JSDOMGlobalObject*>(scriptState->lexicalGlobalObject());
JSValue globalThisValue = scriptState->globalThisValue();
Completion comp = JSMainThreadExecState::evaluate(scriptState, globalObject->globalScopeChain(), sourceCode, globalThisValue);
if (comp.complType() != JSC::Normal && comp.complType() != JSC::ReturnValue)
return ScriptObject();
JSValue functionValue = comp.value();
CallData callData;
CallType callType = functionValue.getCallData(callData);
if (callType == CallTypeNone)
return ScriptObject();
MarkedArgumentBuffer args;
args.append(toJS(scriptState, globalObject, this));
args.append(globalThisValue);
args.append(jsNumber(scriptState, id));
args.append(jsString(scriptState, String("JSC")));
JSValue result = JSC::call(scriptState, functionValue, callType, callData, globalThisValue, args);
if (result.isObject())
return ScriptObject(scriptState, result.getObject());
return ScriptObject();
}
示例15: state
JSValue JSPopStateEvent::state(ExecState* exec) const
{
JSValue cachedValue = m_state.get();
if (!cachedValue.isEmpty()) {
// We cannot use a cached object if we are in a different world than the one it was created in.
if (!cachedValue.isObject() || &worldForDOMObject(cachedValue.getObject()) == ¤tWorld(exec))
return cachedValue;
ASSERT_NOT_REACHED();
}
PopStateEvent& event = impl();
if (!event.state().hasNoValue()) {
// We need to make sure a PopStateEvent does not leak objects in its state property across isolated DOM worlds.
// Ideally, we would check that the worlds have different privileges but that's not possible yet.
JSValue state = event.state().jsValue();
if (state.isObject() && &worldForDOMObject(state.getObject()) != ¤tWorld(exec)) {
if (RefPtr<SerializedScriptValue> serializedValue = event.trySerializeState(exec))
state = serializedValue->deserialize(exec, globalObject(), nullptr);
else
state = jsNull();
}
return cacheState(exec, const_cast<JSPopStateEvent*>(this), state);
}
History* history = event.history();
if (!history || !event.serializedState())
return cacheState(exec, const_cast<JSPopStateEvent*>(this), jsNull());
// There's no cached value from a previous invocation, nor a state value was provided by the
// event, but there is a history object, so first we need to see if the state object has been
// deserialized through the history object already.
// The current history state object might've changed in the meantime, so we need to take care
// of using the correct one, and always share the same deserialization with history.state.
bool isSameState = history->isSameAsCurrentState(event.serializedState().get());
JSValue result;
if (isSameState) {
JSHistory* jsHistory = jsCast<JSHistory*>(toJS(exec, globalObject(), history).asCell());
result = jsHistory->state(exec);
} else
result = event.serializedState()->deserialize(exec, globalObject(), 0);
return cacheState(exec, const_cast<JSPopStateEvent*>(this), result);
}