This article covers features introduced in SpiderMonkey 17
Helper class encapsulating access to the callee, this value, arguments, and argument count for a function call.
Syntax
JS::CallArgs JS::CallArgsFromVp(unsigned argc, JS::Value *vp);
| Name | Type | Description | 
|---|---|---|
| args | unsigned | Number of argument. (2nd argument of JSNative) | 
| vp | JS::Value * | A pointer to the argument value array. (3nd argument of JSNative) | 
Methods
Methods of JS::CallArgs
| Method | Description | 
|---|---|
| bool requireAtLeast(JSContext *cx, const char *fnname, unsigned required) | Returns trueif there are at leastrequiredarguments passed in. Iffalse, it reports an error message on the context. | 
Methods inherited from JS::CallArgsBase
| Method | Description | 
|---|---|
| unsigned length() const | Returns the number of arguments.. | 
| JS::MutableHandleValue operator[](unsigned i) const | Returns the i-th zero-indexed argument. | 
| JS::HandleValue get(unsigned i) const | Returns the i-th zero-indexed argument, orundefinedif there's no such argument. | 
| bool hasDefined(unsigned i) const | Returns trueif thei-th zero-indexed argument is present and is notundefined. | 
Methods inherited from JS::detail::CallReceiverBase
| Method | Description | 
|---|---|
| JSObject &callee() const | Returns the function being called, as an object. Must not be called after rval()has been used! | 
| JS::HandleValue calleev() const | Returns the function being called, as a value. Must not be called after rval()has been used! | 
| JS::HandleValue thisv() const | Returns the thisvalue passed to the function. This method must not be called when the function is being called as a constructor vianew. The value may or may not be an object: it is the individual function's responsibility to box the value if needed. | 
| JS::Value computeThis(JSContext *cx) const | Returns the thisvalue ifthisis an object, otherwise callsJS_ComputeThisand returns it. | 
| bool isConstructing() const | Returns trueif the function is called vianew. | 
| MutableHandleValue rval() const | Returns the currently-set return value. The initial contents of this value are unspecified. Once this method has been called,  If the method you're implementing succeeds by returning  | 
Description
JS::CallArgs is helper class encapsulating access to the callee, this value, arguments, and argument count for a function call.
The intent of JS::CallArgs is that they be used to encapsulate access to the un-abstracted unsigned argc, Value *vp arguments to a function. New code should use CallArgs instead of JS_CALLEE etc. whenever possible.
The eventual plan is to change JSNative to take const CallArgs& directly, for automatic assertion of correct use and to make calling functions more efficient. Embedders should start internally switching away from using argc and vp directly, except to create a CallArgs. Then, when an eventual release making that change occurs, porting efforts will require changing methods' signatures but won't require invasive changes to the methods' implementations, potentially under time pressure.
JS::CallArgs encapsulates access to the callee, this, the function call's arguments, and eventual return value for a function call. The principal way to create a CallArgs is like so, using JS::CallArgsFromVp:
static bool
FunctionReturningArgcTimesArg0(JSContext *cx, unsigned argc, JS::Value *vp)
{
    JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
    // Guard against no arguments or a non-numeric arg0.
    if (args.length() == 0 || !args[0].isNumber()) {
        args.rval().setInt32(0);
        return true;
    }
    // Access to the callee must occur before accessing/setting
    // the return value.
    JSObject &callee = rec.callee();
    // It's always fine to access thisv().
    HandleValue thisv = rec.thisv();
    args.rval().set(JS::NumberValue(args.length() * args[0].toNumber()));
    // callee() and calleev() will now assert.
    return true;
}