mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 10:44:56 +00:00
Bug 969798 - Convert JS_ConvertArguments APIs to take CallArgs rather than raw Value pointer r=terrence
This commit is contained in:
parent
546ade580e
commit
eea6ca3467
@ -167,7 +167,9 @@ private:
|
||||
static bool
|
||||
Slice(JSContext* aCx, unsigned aArgc, jsval* aVp)
|
||||
{
|
||||
JS::Rooted<JSObject*> obj(aCx, JS_THIS_OBJECT(aCx, aVp));
|
||||
JS::CallArgs args = JS::CallArgsFromVp(aArgc, aVp);
|
||||
|
||||
JS::Rooted<JSObject*> obj(aCx, args.thisv().toObjectOrNull());
|
||||
if (!obj) {
|
||||
return false;
|
||||
}
|
||||
@ -179,7 +181,7 @@ private:
|
||||
|
||||
double start = 0, end = 0;
|
||||
JS::Rooted<JSString*> jsContentType(aCx, JS_GetEmptyString(JS_GetRuntime(aCx)));
|
||||
if (!JS_ConvertArguments(aCx, aArgc, JS_ARGV(aCx, aVp), "/IIS", &start,
|
||||
if (!JS_ConvertArguments(aCx, args, "/IIS", &start,
|
||||
&end, jsContentType.address())) {
|
||||
return false;
|
||||
}
|
||||
@ -203,7 +205,7 @@ private:
|
||||
return false;
|
||||
}
|
||||
|
||||
JS_SET_RVAL(aCx, aVp, OBJECT_TO_JSVAL(rtnObj));
|
||||
args.rval().setObject(*rtnObj);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
@ -191,7 +191,7 @@ AssertHeapIsIdleOrStringIsFlat(JSContext *cx, JSString *str)
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(bool)
|
||||
JS_ConvertArguments(JSContext *cx, unsigned argc, jsval *argv, const char *format, ...)
|
||||
JS_ConvertArguments(JSContext *cx, const CallArgs &args, const char *format, ...)
|
||||
{
|
||||
va_list ap;
|
||||
bool ok;
|
||||
@ -199,15 +199,15 @@ JS_ConvertArguments(JSContext *cx, unsigned argc, jsval *argv, const char *forma
|
||||
AssertHeapIsIdle(cx);
|
||||
|
||||
va_start(ap, format);
|
||||
ok = JS_ConvertArgumentsVA(cx, argc, argv, format, ap);
|
||||
ok = JS_ConvertArgumentsVA(cx, args, format, ap);
|
||||
va_end(ap);
|
||||
return ok;
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(bool)
|
||||
JS_ConvertArgumentsVA(JSContext *cx, unsigned argc, jsval *argv, const char *format, va_list ap)
|
||||
JS_ConvertArgumentsVA(JSContext *cx, const CallArgs &args, const char *format, va_list ap)
|
||||
{
|
||||
jsval *sp;
|
||||
unsigned index = 0;
|
||||
bool required;
|
||||
char c;
|
||||
double d;
|
||||
@ -217,8 +217,7 @@ JS_ConvertArgumentsVA(JSContext *cx, unsigned argc, jsval *argv, const char *for
|
||||
|
||||
AssertHeapIsIdle(cx);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, JSValueArray(argv - 2, argc + 2));
|
||||
sp = argv;
|
||||
assertSameCompartment(cx, args);
|
||||
required = true;
|
||||
while ((c = *format++) != '\0') {
|
||||
if (isspace(c))
|
||||
@ -227,24 +226,23 @@ JS_ConvertArgumentsVA(JSContext *cx, unsigned argc, jsval *argv, const char *for
|
||||
required = false;
|
||||
continue;
|
||||
}
|
||||
if (sp == argv + argc) {
|
||||
if (index == args.length()) {
|
||||
if (required) {
|
||||
HandleValue callee = HandleValue::fromMarkedLocation(&argv[-2]);
|
||||
if (JSFunction *fun = ReportIfNotFunction(cx, callee)) {
|
||||
if (JSFunction *fun = ReportIfNotFunction(cx, args.calleev())) {
|
||||
char numBuf[12];
|
||||
JS_snprintf(numBuf, sizeof numBuf, "%u", argc);
|
||||
JS_snprintf(numBuf, sizeof numBuf, "%u", args.length());
|
||||
JSAutoByteString funNameBytes;
|
||||
if (const char *name = GetFunctionNameBytes(cx, fun, &funNameBytes)) {
|
||||
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr,
|
||||
JSMSG_MORE_ARGS_NEEDED,
|
||||
name, numBuf, (argc == 1) ? "" : "s");
|
||||
name, numBuf, (args.length() == 1) ? "" : "s");
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
RootedValue arg(cx, *sp);
|
||||
MutableHandleValue arg = args[index++];
|
||||
switch (c) {
|
||||
case 'b':
|
||||
*va_arg(ap, bool *) = ToBoolean(arg);
|
||||
@ -273,11 +271,10 @@ JS_ConvertArgumentsVA(JSContext *cx, unsigned argc, jsval *argv, const char *for
|
||||
break;
|
||||
case 'S':
|
||||
case 'W':
|
||||
val = *sp;
|
||||
str = ToString<CanGC>(cx, val);
|
||||
str = ToString<CanGC>(cx, arg);
|
||||
if (!str)
|
||||
return false;
|
||||
*sp = STRING_TO_JSVAL(str);
|
||||
arg.setString(str);
|
||||
if (c == 'W') {
|
||||
JSFlatString *flat = str->ensureFlat(cx);
|
||||
if (!flat)
|
||||
@ -288,26 +285,25 @@ JS_ConvertArgumentsVA(JSContext *cx, unsigned argc, jsval *argv, const char *for
|
||||
}
|
||||
break;
|
||||
case 'o':
|
||||
if (sp->isNullOrUndefined()) {
|
||||
if (arg.isNullOrUndefined()) {
|
||||
obj = nullptr;
|
||||
} else {
|
||||
RootedValue v(cx, *sp);
|
||||
obj = ToObject(cx, v);
|
||||
obj = ToObject(cx, arg);
|
||||
if (!obj)
|
||||
return false;
|
||||
}
|
||||
*sp = ObjectOrNullValue(obj);
|
||||
arg.setObjectOrNull(obj);
|
||||
*va_arg(ap, JSObject **) = obj;
|
||||
break;
|
||||
case 'f':
|
||||
obj = ReportIfNotFunction(cx, HandleValue::fromMarkedLocation(sp));
|
||||
obj = ReportIfNotFunction(cx, arg);
|
||||
if (!obj)
|
||||
return false;
|
||||
*sp = OBJECT_TO_JSVAL(obj);
|
||||
arg.setObject(*obj);
|
||||
*va_arg(ap, JSFunction **) = &obj->as<JSFunction>();
|
||||
break;
|
||||
case 'v':
|
||||
*va_arg(ap, jsval *) = *sp;
|
||||
*va_arg(ap, jsval *) = arg;
|
||||
break;
|
||||
case '*':
|
||||
break;
|
||||
@ -315,7 +311,6 @@ JS_ConvertArgumentsVA(JSContext *cx, unsigned argc, jsval *argv, const char *for
|
||||
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_BAD_CHAR, format);
|
||||
return false;
|
||||
}
|
||||
sp++;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -996,13 +996,12 @@ JS_GetEmptyString(JSRuntime *rt);
|
||||
* unconverted arguments.
|
||||
*/
|
||||
extern JS_PUBLIC_API(bool)
|
||||
JS_ConvertArguments(JSContext *cx, unsigned argc, jsval *argv, const char *format,
|
||||
...);
|
||||
JS_ConvertArguments(JSContext *cx, const JS::CallArgs &args, const char *format, ...);
|
||||
|
||||
#ifdef va_start
|
||||
extern JS_PUBLIC_API(bool)
|
||||
JS_ConvertArgumentsVA(JSContext *cx, unsigned argc, jsval *argv,
|
||||
const char *format, va_list ap);
|
||||
JS_ConvertArgumentsVA(JSContext *cx, const JS::CallArgs &args, const char *format,
|
||||
va_list ap);
|
||||
#endif
|
||||
|
||||
extern JS_PUBLIC_API(bool)
|
||||
|
@ -171,8 +171,14 @@ static const JSClass pm_class = {
|
||||
static bool
|
||||
pm_construct(JSContext* cx, unsigned argc, jsval* vp)
|
||||
{
|
||||
CallArgs args = CallArgsFromVp(argc, vp);
|
||||
|
||||
uint32_t mask;
|
||||
if (!JS_ConvertArguments(cx, argc, JS_ARGV(cx, vp), "u", &mask))
|
||||
if (!args.hasDefined(0)) {
|
||||
js_ReportMissingArg(cx, args.calleev(), 0);
|
||||
return false;
|
||||
}
|
||||
if (!JS::ToUint32(cx, args[0], &mask))
|
||||
return false;
|
||||
|
||||
JS::RootedObject obj(cx, JS_NewObjectForConstructor(cx, &pm_class, vp));
|
||||
@ -189,7 +195,7 @@ pm_construct(JSContext* cx, unsigned argc, jsval* vp)
|
||||
}
|
||||
|
||||
JS_SetPrivate(obj, p);
|
||||
*vp = OBJECT_TO_JSVAL(obj);
|
||||
args.rval().setObject(*obj);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1364,7 +1364,7 @@ Quit(JSContext *cx, unsigned argc, jsval *vp)
|
||||
#endif
|
||||
|
||||
CallArgs args = CallArgsFromVp(argc, vp);
|
||||
JS_ConvertArguments(cx, args.length(), args.array(), "/ i", &gExitCode);
|
||||
JS_ConvertArguments(cx, args, "/ i", &gExitCode);
|
||||
|
||||
gQuitting = true;
|
||||
return false;
|
||||
@ -2227,7 +2227,7 @@ DumpObject(JSContext *cx, unsigned argc, jsval *vp)
|
||||
{
|
||||
CallArgs args = CallArgsFromVp(argc, vp);
|
||||
RootedObject arg0(cx);
|
||||
if (!JS_ConvertArguments(cx, args.length(), args.array(), "o", arg0.address()))
|
||||
if (!JS_ConvertArguments(cx, args, "o", arg0.address()))
|
||||
return false;
|
||||
|
||||
js_DumpObject(arg0);
|
||||
@ -2480,9 +2480,11 @@ NewSandbox(JSContext *cx, bool lazy)
|
||||
static bool
|
||||
EvalInContext(JSContext *cx, unsigned argc, jsval *vp)
|
||||
{
|
||||
CallArgs args = CallArgsFromVp(argc, vp);
|
||||
|
||||
RootedString str(cx);
|
||||
RootedObject sobj(cx);
|
||||
if (!JS_ConvertArguments(cx, argc, JS_ARGV(cx, vp), "S / o", str.address(), sobj.address()))
|
||||
if (!JS_ConvertArguments(cx, args, "S / o", str.address(), sobj.address()))
|
||||
return false;
|
||||
|
||||
size_t srclen;
|
||||
@ -2507,7 +2509,7 @@ EvalInContext(JSContext *cx, unsigned argc, jsval *vp)
|
||||
}
|
||||
|
||||
if (srclen == 0) {
|
||||
JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(sobj));
|
||||
args.rval().setObject(*sobj);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -2515,7 +2517,6 @@ EvalInContext(JSContext *cx, unsigned argc, jsval *vp)
|
||||
unsigned lineno;
|
||||
|
||||
JS_DescribeScriptedCaller(cx, &script, &lineno);
|
||||
RootedValue rval(cx);
|
||||
{
|
||||
Maybe<JSAutoCompartment> ac;
|
||||
unsigned flags;
|
||||
@ -2535,15 +2536,14 @@ EvalInContext(JSContext *cx, unsigned argc, jsval *vp)
|
||||
if (!JS_EvaluateUCScript(cx, sobj, src, srclen,
|
||||
script->filename(),
|
||||
lineno,
|
||||
&rval)) {
|
||||
args.rval())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!cx->compartment()->wrap(cx, &rval))
|
||||
if (!cx->compartment()->wrap(cx, args.rval()))
|
||||
return false;
|
||||
|
||||
JS_SET_RVAL(cx, vp, rval);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -379,7 +379,7 @@ static bool
|
||||
Quit(JSContext *cx, unsigned argc, jsval *vp)
|
||||
{
|
||||
gExitCode = 0;
|
||||
JS_ConvertArguments(cx, argc, JS_ARGV(cx, vp),"/ i", &gExitCode);
|
||||
JS_ConvertArguments(cx, JS::CallArgsFromVp(argc, vp),"/ i", &gExitCode);
|
||||
|
||||
gQuitting = true;
|
||||
// exit(0);
|
||||
|
@ -395,13 +395,15 @@ bool PACResolveToString(const nsCString &aHostName,
|
||||
static
|
||||
bool PACDnsResolve(JSContext *cx, unsigned int argc, JS::Value *vp)
|
||||
{
|
||||
JS::CallArgs args = CallArgsFromVp(argc, vp);
|
||||
|
||||
if (NS_IsMainThread()) {
|
||||
NS_WARNING("DNS Resolution From PAC on Main Thread. How did that happen?");
|
||||
return false;
|
||||
}
|
||||
|
||||
JS::Rooted<JSString*> arg1(cx);
|
||||
if (!JS_ConvertArguments(cx, argc, JS_ARGV(cx, vp), "S", arg1.address()))
|
||||
if (!JS_ConvertArguments(cx, args, "S", arg1.address()))
|
||||
return false;
|
||||
|
||||
nsDependentJSString hostName;
|
||||
@ -411,10 +413,10 @@ bool PACDnsResolve(JSContext *cx, unsigned int argc, JS::Value *vp)
|
||||
return false;
|
||||
if (PACResolveToString(NS_ConvertUTF16toUTF8(hostName), dottedDecimal, 0)) {
|
||||
JSString *dottedDecimalString = JS_NewStringCopyZ(cx, dottedDecimal.get());
|
||||
JS_SET_RVAL(cx, vp, STRING_TO_JSVAL(dottedDecimalString));
|
||||
args.rval().setString(dottedDecimalString);
|
||||
}
|
||||
else {
|
||||
JS_SET_RVAL(cx, vp, JSVAL_NULL);
|
||||
args.rval().setNull();
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -441,8 +443,10 @@ bool PACMyIpAddress(JSContext *cx, unsigned int argc, JS::Value *vp)
|
||||
static
|
||||
bool PACProxyAlert(JSContext *cx, unsigned int argc, JS::Value *vp)
|
||||
{
|
||||
JS::CallArgs args = CallArgsFromVp(argc, vp);
|
||||
|
||||
JS::Rooted<JSString*> arg1(cx);
|
||||
if (!JS_ConvertArguments(cx, argc, JS_ARGV(cx, vp), "S", arg1.address()))
|
||||
if (!JS_ConvertArguments(cx, args, "S", arg1.address()))
|
||||
return false;
|
||||
|
||||
nsDependentJSString message;
|
||||
@ -455,7 +459,7 @@ bool PACProxyAlert(JSContext *cx, unsigned int argc, JS::Value *vp)
|
||||
alertMessage += message;
|
||||
PACLogToConsole(alertMessage);
|
||||
|
||||
JS_SET_RVAL(cx, vp, JSVAL_VOID); /* return undefined */
|
||||
args.rval().setUndefined(); /* return undefined */
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user