本文整理汇总了C++中CallArgs::length方法的典型用法代码示例。如果您正苦于以下问题:C++ CallArgs::length方法的具体用法?C++ CallArgs::length怎么用?C++ CallArgs::length使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CallArgs
的用法示例。
在下文中一共展示了CallArgs::length方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CallArgsFromVp
bool
js::math_clz32(JSContext *cx, unsigned argc, Value *vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
if (args.length() == 0) {
args.rval().setInt32(32);
return true;
}
uint32_t n;
if (!ToUint32(cx, args[0], &n))
return false;
if (n == 0) {
args.rval().setInt32(32);
return true;
}
args.rval().setInt32(mozilla::CountLeadingZeroes32(n));
return true;
}
示例2: CallArgsFromVp
static bool
File(JSContext *cx, unsigned argc, Value *vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
if (args.length() == 0) {
XPCThrower::Throw(NS_ERROR_UNEXPECTED, cx);
return false;
}
nsCOMPtr<nsISupports> native;
nsresult rv = nsDOMMultipartFile::NewFile(getter_AddRefs(native));
if (NS_FAILED(rv)) {
XPCThrower::Throw(rv, cx);
return false;
}
nsCOMPtr<nsIJSNativeInitializer> initializer = do_QueryInterface(native);
MOZ_ASSERT(initializer);
rv = initializer->Initialize(nullptr, cx, nullptr, args);
if (NS_FAILED(rv)) {
XPCThrower::Throw(rv, cx);
return false;
}
nsXPConnect* xpc = nsXPConnect::XPConnect();
JSObject* glob = CurrentGlobalOrNull(cx);
nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
rv = xpc->WrapNativeToJSVal(cx, glob, native, nullptr,
&NS_GET_IID(nsISupports),
true, args.rval().address());
if (NS_FAILED(rv)) {
XPCThrower::Throw(rv, cx);
return false;
}
return true;
}
示例3: CallArgsFromVp
bool
X4TypeDescr::call(JSContext *cx, unsigned argc, Value *vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
const unsigned LANES = 4;
if (args.length() < LANES) {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_MORE_ARGS_NEEDED,
args.callee().getClass()->name, "3", "s");
return false;
}
double values[LANES];
for (unsigned i = 0; i < LANES; i++) {
if (!ToNumber(cx, args[i], &values[i]))
return false;
}
Rooted<X4TypeDescr*> descr(cx, &args.callee().as<X4TypeDescr>());
Rooted<TypedObject*> result(cx, TypedObject::createZeroed(cx, descr, 0));
if (!result)
return false;
MOZ_ASSERT(!result->owner().isNeutered());
switch (descr->type()) {
#define STORE_LANES(_constant, _type, _name) \
case _constant: \
{ \
_type *mem = reinterpret_cast<_type*>(result->typedMem()); \
for (unsigned i = 0; i < LANES; i++) \
mem[i] = ConvertScalar<_type>(values[i]); \
break; \
}
JS_FOR_EACH_X4_TYPE_REPR(STORE_LANES)
#undef STORE_LANES
}
args.rval().setObject(*result);
return true;
}
示例4: timeZone
bool
js::intl_canonicalizeTimeZone(JSContext* cx, unsigned argc, Value* vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
MOZ_ASSERT(args.length() == 1);
MOZ_ASSERT(args[0].isString());
SharedIntlData& sharedIntlData = cx->runtime()->sharedIntlData.ref();
// Some time zone names are canonicalized differently by ICU -- handle
// those first:
RootedString timeZone(cx, args[0].toString());
RootedAtom ianaTimeZone(cx);
if (!sharedIntlData.tryCanonicalizeTimeZoneConsistentWithIANA(cx, timeZone, &ianaTimeZone))
return false;
if (ianaTimeZone) {
cx->markAtom(ianaTimeZone);
args.rval().setString(ianaTimeZone);
return true;
}
AutoStableStringChars stableChars(cx);
if (!stableChars.initTwoByte(cx, timeZone))
return false;
mozilla::Range<const char16_t> tzchars = stableChars.twoByteRange();
JSString* str = CallICU(cx, [&tzchars](UChar* chars, uint32_t size, UErrorCode* status) {
return ucal_getCanonicalTimeZoneID(tzchars.begin().get(), tzchars.length(),
chars, size, nullptr, status);
});
if (!str)
return false;
args.rval().setString(str);
return true;
}
示例5: obj
/* ES5 15.2.4.6. */
static bool
obj_isPrototypeOf(JSContext* cx, unsigned argc, Value* vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
/* Step 1. */
if (args.length() < 1 || !args[0].isObject()) {
args.rval().setBoolean(false);
return true;
}
/* Step 2. */
RootedObject obj(cx, ToObject(cx, args.thisv()));
if (!obj)
return false;
/* Step 3. */
bool isDelegate;
if (!IsDelegate(cx, obj, args[0], &isDelegate))
return false;
args.rval().setBoolean(isDelegate);
return true;
}
示例6: inspector
bool
intrinsic_ParallelSpew(ThreadSafeContext *cx, unsigned argc, Value *vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
JS_ASSERT(args.length() == 1);
JS_ASSERT(args[0].isString());
AutoCheckCannotGC nogc;
ScopedThreadSafeStringInspector inspector(args[0].toString());
if (!inspector.ensureChars(cx, nogc))
return false;
ScopedJSFreePtr<char> bytes;
if (inspector.hasLatin1Chars())
bytes = JS::CharsToNewUTF8CharsZ(cx, inspector.latin1Range()).c_str();
else
bytes = JS::CharsToNewUTF8CharsZ(cx, inspector.twoByteRange()).c_str();
parallel::Spew(parallel::SpewOps, bytes);
args.rval().setUndefined();
return true;
}
示例7: fun
/*
* SetScriptHints(fun, flags): Sets various internal hints to the ion
* compiler for use when compiling |fun| or calls to |fun|. Flags
* should be a dictionary object.
*
* The function |fun| should be a self-hosted function (in particular,
* it *must* be a JS function).
*
* Possible flags:
* - |cloneAtCallsite: true| will hint that |fun| should be cloned
* each callsite to improve TI resolution. This is important for
* higher-order functions like |Array.map|.
*/
static JSBool
intrinsic_SetScriptHints(JSContext *cx, unsigned argc, Value *vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
JS_ASSERT(args.length() >= 2);
JS_ASSERT(args[0].isObject() && args[0].toObject().isFunction());
JS_ASSERT(args[1].isObject());
RootedFunction fun(cx, args[0].toObject().toFunction());
RootedScript funScript(cx, fun->nonLazyScript());
RootedObject flags(cx, &args[1].toObject());
RootedId id(cx);
RootedValue propv(cx);
id = AtomToId(Atomize(cx, "cloneAtCallsite", strlen("cloneAtCallsite")));
if (!JSObject::getGeneric(cx, flags, flags, id, &propv))
return false;
if (ToBoolean(propv))
funScript->shouldCloneAtCallsite = true;
return true;
}
示例8: wrapped
bool
CrossCompartmentWrapper::call(JSContext *cx, HandleObject wrapper, const CallArgs &args)
{
RootedObject wrapped(cx, wrappedObject(wrapper));
{
AutoCompartment call(cx, wrapped);
args.setCallee(ObjectValue(*wrapped));
if (!cx->compartment->wrap(cx, args.mutableThisv()))
return false;
for (size_t n = 0; n < args.length(); ++n) {
if (!cx->compartment->wrap(cx, args.handleAt(n)))
return false;
}
if (!Wrapper::call(cx, wrapper, args))
return false;
}
return cx->compartment->wrap(cx, args.rval());
}
示例9: callee
static bool
WasmTextToBinary(JSContext* cx, unsigned argc, Value* vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
RootedObject callee(cx, &args.callee());
if (args.length() != 1) {
ReportUsageError(cx, callee, "Wrong number of arguments");
return false;
}
if (!args[0].isString()) {
ReportUsageError(cx, callee, "First argument must be a String");
return false;
}
AutoStableStringChars twoByteChars(cx);
if (!twoByteChars.initTwoByte(cx, args[0].toString()))
return false;
UniqueChars error;
wasm::UniqueBytecode bytes = wasm::TextToBinary(twoByteChars.twoByteChars(), &error);
if (!bytes) {
JS_ReportErrorNumber(cx, GetErrorMessage, nullptr, JSMSG_WASM_TEXT_FAIL,
error.get() ? error.get() : "out of memory");
return false;
}
Rooted<ArrayBufferObject*> buffer(cx, ArrayBufferObject::create(cx, bytes->length()));
if (!buffer)
return false;
memcpy(buffer->dataPointer(), bytes->begin(), bytes->length());
args.rval().setObject(*buffer);
return true;
}
示例10: locale
bool
js::intl_patternForSkeleton(JSContext* cx, unsigned argc, Value* vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
MOZ_ASSERT(args.length() == 2);
MOZ_ASSERT(args[0].isString());
MOZ_ASSERT(args[1].isString());
JSAutoByteString locale(cx, args[0].toString());
if (!locale)
return false;
AutoStableStringChars skeleton(cx);
if (!skeleton.initTwoByte(cx, args[1].toString()))
return false;
mozilla::Range<const char16_t> skelChars = skeleton.twoByteRange();
UErrorCode status = U_ZERO_ERROR;
UDateTimePatternGenerator* gen = udatpg_open(IcuLocale(locale.ptr()), &status);
if (U_FAILURE(status)) {
intl::ReportInternalError(cx);
return false;
}
ScopedICUObject<UDateTimePatternGenerator, udatpg_close> toClose(gen);
JSString* str =
CallICU(cx, [gen, &skelChars](UChar* chars, uint32_t size, UErrorCode* status) {
return udatpg_getBestPattern(gen, skelChars.begin().get(), skelChars.length(),
chars, size, status);
});
if (!str)
return false;
args.rval().setString(str);
return true;
}
示例11: GetKeyArg
MOZ_ALWAYS_INLINE bool
WeakMap_has_impl(JSContext *cx, CallArgs args)
{
JS_ASSERT(IsWeakMap(args.thisv()));
if (args.length() < 1) {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_MORE_ARGS_NEEDED,
"WeakMap.has", "0", "s");
return false;
}
JSObject *key = GetKeyArg(cx, args);
if (!key)
return false;
if (ObjectValueMap *map = args.thisv().toObject().as<WeakMapObject>().getMap()) {
if (map->has(key)) {
args.rval().setBoolean(true);
return true;
}
}
args.rval().setBoolean(false);
return true;
}
示例12: obj
bool
js::obj_construct(JSContext* cx, unsigned argc, Value* vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
RootedObject obj(cx, nullptr);
if (args.isConstructing() && (&args.newTarget().toObject() != &args.callee())) {
RootedObject newTarget(cx, &args.newTarget().toObject());
obj = CreateThis(cx, &PlainObject::class_, newTarget);
if (!obj)
return false;
} else if (args.length() > 0 && !args[0].isNullOrUndefined()) {
obj = ToObject(cx, args[0]);
if (!obj)
return false;
} else {
/* Make an object whether this was called with 'new' or not. */
if (!NewObjectScriptedCall(cx, &obj))
return false;
}
args.rval().setObject(*obj);
return true;
}
示例13: CallArgsFromVp
static bool
InternalConst(JSContext *cx, unsigned argc, jsval *vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
if (args.length() == 0) {
JS_ReportError(cx, "the function takes exactly one argument");
return false;
}
JSString *str = ToString(cx, args[0]);
if (!str)
return false;
JSFlatString *flat = JS_FlattenString(cx, str);
if (!flat)
return false;
if (JS_FlatStringEqualsAscii(flat, "INCREMENTAL_MARK_STACK_BASE_CAPACITY")) {
vp[0] = UINT_TO_JSVAL(js::INCREMENTAL_MARK_STACK_BASE_CAPACITY);
} else {
JS_ReportError(cx, "unknown const name");
return false;
}
return true;
}
示例14: CallArgsFromVp
bool
RilConsumer::PostRILMessage(JSContext* aCx, unsigned aArgc, Value* aVp)
{
CallArgs args = CallArgsFromVp(aArgc, aVp);
if (args.length() != 2) {
JS_ReportError(aCx, "Expecting two arguments with the RIL message");
return false;
}
int clientId = args[0].toInt32();
if ((ssize_t)sRilConsumers.Length() <= clientId || !sRilConsumers[clientId]) {
// Probably shutting down.
return true;
}
nsresult rv = sRilConsumers[clientId]->Send(aCx, args);
if (NS_FAILED(rv)) {
return false;
}
return true;
}
示例15: CallArgsFromVp
bool
Library::Close(JSContext* cx, unsigned argc, Value* vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
JSObject* obj = JS_THIS_OBJECT(cx, vp);
if (!obj)
return false;
if (!IsLibrary(obj)) {
JS_ReportError(cx, "not a library");
return false;
}
if (args.length() != 0) {
JS_ReportError(cx, "close doesn't take any arguments");
return false;
}
// delete our internal objects
UnloadLibrary(obj);
JS_SetReservedSlot(obj, SLOT_LIBRARY, PrivateValue(nullptr));
args.rval().setUndefined();
return true;
}