本文整理汇总了C++中js::CallArgs::length方法的典型用法代码示例。如果您正苦于以下问题:C++ CallArgs::length方法的具体用法?C++ CallArgs::length怎么用?C++ CallArgs::length使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类js::CallArgs
的用法示例。
在下文中一共展示了CallArgs::length方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: InitBlob
NS_IMETHODIMP
nsDOMMultipartFile::Initialize(nsISupports* aOwner,
JSContext* aCx,
JSObject* aObj,
const JS::CallArgs& aArgs)
{
if (!mIsFile) {
return InitBlob(aCx, aArgs.length(), aArgs.array(), GetXPConnectNative);
}
if (!nsContentUtils::IsCallerChrome()) {
return InitFile(aCx, aArgs.length(), aArgs.array());
}
if (aArgs.length() > 0) {
JS::Value* argv = aArgs.array();
if (argv[0].isObject()) {
JS::Rooted<JSObject*> obj(aCx, &argv[0].toObject());
if (JS_IsArrayObject(aCx, obj)) {
return InitFile(aCx, aArgs.length(), aArgs.array());
}
}
}
return InitChromeFile(aCx, aArgs.length(), aArgs.array());
}
示例2: construct
void CodeInfo::construct(JSContext* cx, JS::CallArgs args) {
uassert(ErrorCodes::BadValue,
"Code needs 0, 1 or 2 arguments",
args.length() == 0 || args.length() == 1 || args.length() == 2);
auto scope = getScope(cx);
JS::RootedObject thisv(cx);
scope->getProto<CodeInfo>().newObject(&thisv);
ObjectWrapper o(cx, thisv);
if (args.length() == 0) {
o.setString(InternedString::code, "");
} else if (args.length() == 1) {
JS::HandleValue codeArg = args.get(0);
if (!codeArg.isString())
uasserted(ErrorCodes::BadValue, "code must be a string");
o.setValue(InternedString::code, codeArg);
} else {
if (!args.get(0).isString())
uasserted(ErrorCodes::BadValue, "code must be a string");
if (!args.get(1).isObject())
uasserted(ErrorCodes::BadValue, "scope must be an object");
o.setValue(InternedString::code, args.get(0));
o.setValue(InternedString::scope, args.get(1));
}
args.rval().setObjectOrNull(thisv);
}
示例3: construct
void TimestampInfo::construct(JSContext* cx, JS::CallArgs args) {
auto scope = getScope(cx);
JS::RootedObject thisv(cx);
scope->getProto<TimestampInfo>().newObject(&thisv);
ObjectWrapper o(cx, thisv);
if (args.length() == 0) {
o.setNumber("t", 0);
o.setNumber("i", 0);
} else if (args.length() == 2) {
if (!args.get(0).isNumber())
uasserted(ErrorCodes::BadValue, "Timestamp time must be a number");
if (!args.get(1).isNumber())
uasserted(ErrorCodes::BadValue, "Timestamp increment must be a number");
int64_t t = ValueWriter(cx, args.get(0)).toInt64();
int64_t largestVal = int64_t(Timestamp::max().getSecs());
if (t > largestVal)
uasserted(ErrorCodes::BadValue,
str::stream() << "The first argument must be in seconds; " << t
<< " is too large (max " << largestVal << ")");
o.setValue("t", args.get(0));
o.setValue("i", args.get(1));
} else {
uasserted(ErrorCodes::BadValue, "Timestamp needs 0 or 2 arguments");
}
args.rval().setObjectOrNull(thisv);
}
示例4: construct
void DBInfo::construct(JSContext* cx, JS::CallArgs args) {
auto scope = getScope(cx);
if (args.length() != 2)
uasserted(ErrorCodes::BadValue, "db constructor requires 2 arguments");
for (unsigned i = 0; i < args.length(); ++i) {
uassert(ErrorCodes::BadValue,
"db initializer called with undefined argument",
!args.get(i).isUndefined());
}
JS::RootedObject thisv(cx);
scope->getProto<DBInfo>().newObject(&thisv);
ObjectWrapper o(cx, thisv);
o.setValue(InternedString::_mongol, args.get(0));
o.setValue(InternedString::_name, args.get(1));
std::string dbName = ValueWriter(cx, args.get(1)).toString();
if (!NamespaceString::validDBName(dbName))
uasserted(ErrorCodes::BadValue,
str::stream() << "[" << dbName << "] is not a valid database name");
args.rval().setObjectOrNull(thisv);
}
示例5: InitBlob
NS_IMETHODIMP
nsDOMMultipartFile::Initialize(nsISupports* aOwner,
JSContext* aCx,
JSObject* aObj,
const JS::CallArgs& aArgs)
{
if (!mIsFile) {
return InitBlob(aCx, aArgs.length(), aArgs.array(), GetXPConnectNative);
}
return InitFile(aCx, aArgs.length(), aArgs.array());
}
示例6: funobj
bool
XPC_WN_CallMethod(JSContext* cx, unsigned argc, Value* vp)
{
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
MOZ_ASSERT(JS_TypeOfValue(cx, args.calleev()) == JSTYPE_FUNCTION, "bad function");
RootedObject funobj(cx, &args.callee());
RootedObject obj(cx, JS_THIS_OBJECT(cx, vp));
if (!obj)
return false;
obj = FixUpThisIfBroken(obj, funobj);
XPCCallContext ccx(cx, obj, funobj, JSID_VOIDHANDLE, args.length(),
args.array(), vp);
XPCWrappedNative* wrapper = ccx.GetWrapper();
THROW_AND_RETURN_IF_BAD_WRAPPER(cx, wrapper);
RefPtr<XPCNativeInterface> iface;
XPCNativeMember* member;
if (!XPCNativeMember::GetCallInfo(funobj, &iface, &member))
return Throw(NS_ERROR_XPC_CANT_GET_METHOD_INFO, cx);
ccx.SetCallInfo(iface, member, false);
return XPCWrappedNative::CallMethod(ccx);
}
示例7: thisObj
bool
FieldSetterImpl(JSContext *cx, JS::CallArgs args)
{
const JS::Value &thisv = args.thisv();
MOZ_ASSERT(ValueHasISupportsPrivate(thisv));
JS::Rooted<JSObject*> thisObj(cx, &thisv.toObject());
// We should be in the compartment of |this|. If we got here via nativeCall,
// |this| is not same-compartment with |callee|, and it's possible via
// asymmetric security semantics that |args.calleev()| is actually a security
// wrapper. In this case, we know we want to do an unsafe unwrap, and
// InstallXBLField knows how to handle cross-compartment pointers.
bool installed = false;
JS::Rooted<JSObject*> callee(cx, js::UncheckedUnwrap(&args.calleev().toObject()));
JS::Rooted<jsid> id(cx);
if (!InstallXBLField(cx, callee, thisObj, &id, &installed)) {
return false;
}
if (installed) {
JS::Rooted<JS::Value> v(cx,
args.length() > 0 ? args[0] : JS::UndefinedValue());
if (!::JS_SetPropertyById(cx, thisObj, id, v.address())) {
return false;
}
}
args.rval().setUndefined();
return true;
}
示例8:
static JSBool
AfxGlobal_modReplaceOnGlEnd(JSContext *cx, unsigned argc, JS::Value *vp)
{
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
if(4 > args.length())
return JS_FALSE;
GLint oldActiveTextureArb;
GLboolean oldTexture2d;
GLint oldTextureBinding2d;
GLint oldTextureEnvMode;
if(!JS::ToInt32(cx, args[0], &oldActiveTextureArb))
return JS_FALSE;
oldTexture2d = JS::ToBoolean(args[1]);
if(!JS::ToInt32(cx, args[2], &oldTextureBinding2d))
return JS_FALSE;
if(!JS::ToInt32(cx, args[3], &oldTextureEnvMode))
return JS_FALSE;
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, oldTextureEnvMode);
glBindTexture(GL_TEXTURE_2D, oldTextureBinding2d);
if(!oldTexture2d) glDisable(GL_TEXTURE_2D);
glActiveTextureARB(oldActiveTextureArb);
args.rval().set(JSVAL_VOID);
return JS_TRUE;
}
示例9: strCvar
static JSBool
AfxGlobal_hlCvarSetValue(JSContext *cx, unsigned argc, JS::Value *vp)
{
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
if(2 > args.length())
return JS_FALSE;
JSString *str = JS_ValueToString(cx, args[0]);
if (!str)
return JS_FALSE;
char * cvar = JS_EncodeString(cx, str);
if(!cvar)
return JS_FALSE;
std::string strCvar(cvar);
JS_free(cx, cvar);
double value;
if(!JS::ToNumber(cx, args[1], &value))
return JS_FALSE;
pEngfuncs->Cvar_SetValue(const_cast<char *>(strCvar.c_str()), (float)value);
args.rval().set(JSVAL_VOID);
return JS_TRUE;
}
示例10: strFile
static JSBool
AfxGlobal_load(JSContext *cx, unsigned argc, JS::Value *vp)
{
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
if(1 > args.length())
return JS_FALSE;
JSString *str = JS_ValueToString(cx, args[0]);
if (!str)
return JS_FALSE;
char *filename = JS_EncodeString(cx, str);
if(!filename)
return JS_FALSE;
std::string strFile(filename);
JS_free(cx, filename);
JS::RootedObject thisobj(cx, JS_THIS_OBJECT(cx, vp));
if (!thisobj)
return false;
JSScript *script = JS::Compile(cx, thisobj, JS::CompileOptions(cx), strFile.c_str());
if(!script)
return JS_FALSE;
jsval result;
if(!JS_ExecuteScript(cx, thisobj, script, &result))
return JS_FALSE;
args.rval().set(result);
return JS_TRUE;
}
示例11: CreatePath
static JSBool
AfxGlobal_createPath(JSContext *cx, unsigned argc, JS::Value *vp)
{
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
if(1 > args.length())
return JS_FALSE;
JSString *str = JS_ValueToString(cx, args[0]);
if (!str)
return JS_FALSE;
char *c_str = JS_EncodeString(cx, str);
if(!c_str)
return JS_FALSE;
bool bOk = false;
std::wstring wPath;
std::string path;
if(AnsiStringToWideString(c_str, wPath)
&& CreatePath(wPath.c_str(), wPath)
&& WideStringToAnsiString(wPath.c_str(), path))
{
JSString * str = JS_NewStringCopyZ(cx, path.c_str());
args.rval().set(STRING_TO_JSVAL(str));
}
else
args.rval().set(JSVAL_NULL);
JS_free(cx, c_str);
return JS_TRUE;
}
示例12: AnsiStringToWideString
static JSBool
AfxGlImage_writeBitmap(JSContext *cx, unsigned argc, JS::Value *vp)
{
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
if(1 > args.length())
return JS_FALSE;
JSObject * jsObj;
if(!JS_ValueToObject(cx, args.thisv(), &jsObj))
return JS_FALSE;
AfxGlImage *afxGlImage = (AfxGlImage *)JS_GetPrivate(jsObj);
JSString *str = JS_ValueToString(cx, args[0]);
if (!str)
return JS_FALSE;
char *c_str = JS_EncodeString(cx, str);
if(!c_str)
return JS_FALSE;
std::wstring wFileName;
bool bOk = AnsiStringToWideString(c_str, wFileName);
JS_free(cx, c_str);
if(!(bOk
&& AfxImageUtils::WriteBitmap(afxGlImage, wFileName.c_str())))
return JS_FALSE;
args.rval().set(JSVAL_VOID);
return JS_TRUE;
}
示例13: CallArgsFromVp
JS_BINDED_FUNC_IMPL(FakeAudio, removeEventListener) {
JS::CallArgs args = CallArgsFromVp(argc, vp);
if (args.length() >= 2) {
// need to think this through
}
return JS_TRUE;
}
示例14: WrapJS
static bool
RegisterAppManifest(JSContext* cx, unsigned argc, jsval* vp)
{
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
if (args.length() != 1) {
JS_ReportError(cx, "Wrong number of arguments");
return false;
}
if (!args[0].isObject()) {
JS_ReportError(cx, "Expected object as argument 1 to registerAppManifest");
return false;
}
Rooted<JSObject*> arg1(cx, &args[0].toObject());
nsCOMPtr<nsIFile> file;
nsresult rv = nsXPConnect::XPConnect()->
WrapJS(cx, arg1, NS_GET_IID(nsIFile), getter_AddRefs(file));
if (NS_FAILED(rv)) {
XPCThrower::Throw(rv, cx);
return false;
}
rv = XRE_AddManifestLocation(NS_APP_LOCATION, file);
if (NS_FAILED(rv)) {
XPCThrower::Throw(rv, cx);
return false;
}
return true;
}
示例15: getHolder
void SessionInfo::Functions::getTxnNumber::call(JSContext* cx, JS::CallArgs args) {
auto holder = getHolder(args);
invariant(holder);
uassert(ErrorCodes::BadValue, "getTxnNumber takes no arguments", args.length() == 0);
ValueReader(cx, args.rval()).fromInt64(holder->txnNumber);
}