本文整理汇总了C++中JSValue::isUndefinedOrNull方法的典型用法代码示例。如果您正苦于以下问题:C++ JSValue::isUndefinedOrNull方法的具体用法?C++ JSValue::isUndefinedOrNull怎么用?C++ JSValue::isUndefinedOrNull使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类JSValue
的用法示例。
在下文中一共展示了JSValue::isUndefinedOrNull方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: new
// 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);
}
示例2: speculationFromValue
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;
}
示例3: objectProtoFuncToString
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);
}
示例4: send
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();
}
示例5: send
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();
}
示例6: send
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();
}
示例7: evaluate
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;
}
示例8: fillMessagePortArray
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();
}
}
示例9: encode
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);
}
示例10: 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);
}
示例11: convertValue
void JSDictionary::convertValue(ExecState* exec, JSValue value, ArrayValue& result)
{
if (value.isUndefinedOrNull())
return;
result = ArrayValue(exec, value);
}
示例12: evaluate
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);
}
示例13: functionProtoFuncApply
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));
}
示例14: evaluate
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);
}
示例15: send
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();
}