Bug 933834 - Rename and handlify JS_ValueToString. r=terrence,bz

This commit is contained in:
Tom Schuster 2013-11-16 13:31:36 +01:00
parent ab661fadf8
commit bc757ef965
42 changed files with 268 additions and 322 deletions

View File

@ -112,10 +112,10 @@ IDToString(JSContext *cx, jsid id_)
if (JSID_IS_STRING(id))
return JS_GetInternedStringChars(JSID_TO_STRING(id));
JS::Value idval;
if (!JS_IdToValue(cx, id, &idval))
JS::Rooted<JS::Value> idval(cx);
if (!JS_IdToValue(cx, id, idval.address()))
return nullptr;
JSString *str = JS_ValueToString(cx, idval);
JSString *str = JS::ToString(cx, idval);
if(!str)
return nullptr;
return JS_GetStringCharsZ(cx, str);

View File

@ -268,7 +268,7 @@ nsDOMMultipartFile::ParseBlobArrayArgument(JSContext* aCx, JS::Value& aValue,
}
// coerce it to a string
JSString* str = JS_ValueToString(aCx, element);
JSString* str = JS::ToString(aCx, element);
NS_ENSURE_TRUE(str, NS_ERROR_TYPE_ERR);
blobSet.AppendString(str, aNativeEOL, aCx);
}
@ -342,7 +342,7 @@ nsDOMMultipartFile::InitChromeFile(JSContext* aCx,
mIsFromNsiFile = true;
} else {
// It's a string
JSString* str = JS_ValueToString(aCx, aArgv[0]);
JSString* str = JS::ToString(aCx, JS::Handle<JS::Value>::fromMarkedLocation(&aArgv[0]));
NS_ENSURE_TRUE(str, NS_ERROR_XPC_BAD_CONVERT_JS);
nsDependentJSString xpcomStr;
@ -397,7 +397,7 @@ nsDOMMultipartFile::InitFile(JSContext* aCx,
}
// File name
JSString* str = JS_ValueToString(aCx, aArgv[1]);
JSString* str = JS::ToString(aCx, JS::Handle<JS::Value>::fromMarkedLocation(&aArgv[1]));
NS_ENSURE_TRUE(str, NS_ERROR_XPC_BAD_CONVERT_JS);
nsDependentJSString xpcomStr;

View File

@ -1444,8 +1444,8 @@ txVariable::Convert(nsIVariant *aValue, txAExprResult** aResult)
JS::Rooted<JSObject*> jsobj(cx, holder->GetJSObject());
NS_ENSURE_STATE(jsobj);
JS::Rooted<JSString*> str(cx,
JS_ValueToString(cx, OBJECT_TO_JSVAL(jsobj)));
JS::Rooted<JS::Value> v(cx, JS::ObjectValue(*jsobj));
JS::Rooted<JSString*> str(cx, JS::ToString(cx, v));
NS_ENSURE_TRUE(str, NS_ERROR_FAILURE);
nsDependentJSString value;

View File

@ -677,7 +677,7 @@ AudioChannelService::Observe(nsISupports* aSubject, const char* aTopic, const PR
return NS_OK;
}
JS::Rooted<JSString*> jsKey(cx, JS_ValueToString(cx, key));
JS::Rooted<JSString*> jsKey(cx, JS::ToString(cx, key));
if (!jsKey) {
return NS_OK;
}

View File

@ -616,10 +616,10 @@ IdToString(JSContext *cx, jsid id)
{
if (JSID_IS_STRING(id))
return JSID_TO_STRING(id);
jsval idval;
if (!::JS_IdToValue(cx, id, &idval))
JS::Rooted<JS::Value> idval(cx);
if (!::JS_IdToValue(cx, id, idval.address()))
return nullptr;
return JS_ValueToString(cx, idval);
return JS::ToString(cx, idval);
}
static inline nsresult
@ -3292,7 +3292,7 @@ LocationSetterGuts(JSContext *cx, JSObject *obj, JS::MutableHandle<JS::Value> vp
NS_ENSURE_SUCCESS(rv, rv);
// Grab the value we're being set to before we stomp on |vp|
JS::Rooted<JSString*> val(cx, ::JS_ValueToString(cx, vp));
JS::Rooted<JSString*> val(cx, JS::ToString(cx, vp));
NS_ENSURE_TRUE(val, NS_ERROR_UNEXPECTED);
// Make sure |val| stays alive below
@ -4198,9 +4198,10 @@ nsHTMLDocumentSH::ReleaseDocument(JSFreeOp *fop, JSObject *obj)
bool
nsHTMLDocumentSH::CallToGetPropMapper(JSContext *cx, unsigned argc, jsval *vp)
{
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
// Handle document.all("foo") style access to document.all.
if (argc != 1) {
if (args.length() != 1) {
// XXX: Should throw NS_ERROR_XPC_NOT_ENOUGH_ARGS for argc < 1,
// and create a new NS_ERROR_XPC_TOO_MANY_ARGS for argc > 1? IE
// accepts nothing other than one arg.
@ -4210,7 +4211,7 @@ nsHTMLDocumentSH::CallToGetPropMapper(JSContext *cx, unsigned argc, jsval *vp)
}
// Convert all types to string.
JS::Rooted<JSString*> str(cx, ::JS_ValueToString(cx, JS_ARGV(cx, vp)[0]));
JS::Rooted<JSString*> str(cx, JS::ToString(cx, args[0]));
if (!str) {
return false;
}
@ -4218,10 +4219,9 @@ nsHTMLDocumentSH::CallToGetPropMapper(JSContext *cx, unsigned argc, jsval *vp)
// If we are called via document.all(id) instead of document.all.item(i) or
// another method, use the document.all callee object as self.
JSObject *self;
JS::Value callee = JS_CALLEE(cx, vp);
if (callee.isObject() &&
JS_GetClass(&callee.toObject()) == &sHTMLDocumentAllClass) {
self = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
if (args.calleev().isObject() &&
JS_GetClass(&args.calleev().toObject()) == &sHTMLDocumentAllClass) {
self = &args.calleev().toObject();
} else {
self = JS_THIS_OBJECT(cx, vp);
if (!self)
@ -4235,13 +4235,7 @@ nsHTMLDocumentSH::CallToGetPropMapper(JSContext *cx, unsigned argc, jsval *vp)
return false;
}
JS::Rooted<JS::Value> value(cx);
if (!::JS_GetUCProperty(cx, self, chars, length, &value)) {
return false;
}
*vp = value;
return true;
return ::JS_GetUCProperty(cx, self, chars, length, args.rval());
}
// StringArray helper
@ -4436,7 +4430,8 @@ nsStorage2SH::SetProperty(nsIXPConnectWrappedNative *wrapper,
nsDependentJSString keyStr;
NS_ENSURE_TRUE(keyStr.init(cx, key), NS_ERROR_UNEXPECTED);
JSString *value = ::JS_ValueToString(cx, *vp);
JS::Rooted<JS::Value> val(cx, *vp);
JSString *value = JS::ToString(cx, val);
NS_ENSURE_TRUE(value, NS_ERROR_UNEXPECTED);
nsDependentJSString valueStr;

View File

@ -1536,16 +1536,16 @@ TraceMallocEnable(JSContext *cx, unsigned argc, JS::Value *vp)
static bool
TraceMallocOpenLogFile(JSContext *cx, unsigned argc, JS::Value *vp)
{
int fd;
JSString *str;
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
if (!CheckUniversalXPConnectForTraceMalloc(cx))
return false;
int fd;
if (argc == 0) {
fd = -1;
} else {
str = JS_ValueToString(cx, JS_ARGV(cx, vp)[0]);
JSString *str = JS::ToString(cx, args[0]);
if (!str)
return false;
JSAutoByteString filename(cx, str);
@ -1557,7 +1557,7 @@ TraceMallocOpenLogFile(JSContext *cx, unsigned argc, JS::Value *vp)
return false;
}
}
JS_SET_RVAL(cx, vp, INT_TO_JSVAL(fd));
args.rva().setInt32(fd);
return true;
}
@ -1608,27 +1608,29 @@ TraceMallocCloseLogFD(JSContext *cx, unsigned argc, JS::Value *vp)
static bool
TraceMallocLogTimestamp(JSContext *cx, unsigned argc, JS::Value *vp)
{
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
if (!CheckUniversalXPConnectForTraceMalloc(cx))
return false;
JSString *str = JS_ValueToString(cx, argc ? JS_ARGV(cx, vp)[0] : JSVAL_VOID);
JSString *str = JS::ToString(cx, args.get(0));
if (!str)
return false;
JSAutoByteString caption(cx, str);
if (!caption)
return false;
NS_TraceMallocLogTimestamp(caption.ptr());
JS_SET_RVAL(cx, vp, JSVAL_VOID);
args.rval().setUndefined();
return true;
}
static bool
TraceMallocDumpAllocations(JSContext *cx, unsigned argc, JS::Value *vp)
{
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
if (!CheckUniversalXPConnectForTraceMalloc(cx))
return false;
JSString *str = JS_ValueToString(cx, argc ? JS_ARGV(cx, vp)[0] : JSVAL_VOID);
JSString *str = JS::ToString(cx, args.get(0));
if (!str)
return false;
JSAutoByteString pathname(cx, str);
@ -1638,7 +1640,7 @@ TraceMallocDumpAllocations(JSContext *cx, unsigned argc, JS::Value *vp)
JS_ReportError(cx, "can't dump to %s: %s", pathname.ptr(), strerror(errno));
return false;
}
JS_SET_RVAL(cx, vp, JSVAL_VOID);
args.rval().setUndefined();
return true;
}
@ -1668,7 +1670,8 @@ namespace dmd {
static bool
ReportAndDump(JSContext *cx, unsigned argc, JS::Value *vp)
{
JSString *str = JS_ValueToString(cx, argc ? JS_ARGV(cx, vp)[0] : JSVAL_VOID);
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
JSString *str = JS::ToString(cx, args.get(0));
if (!str)
return false;
JSAutoByteString pathname(cx, str);
@ -1690,7 +1693,7 @@ ReportAndDump(JSContext *cx, unsigned argc, JS::Value *vp)
fclose(fp);
JS_SET_RVAL(cx, vp, JSVAL_VOID);
args.rval().setUndefined();
return true;
}

View File

@ -317,7 +317,8 @@ nsJSScriptTimeoutHandler::Init(nsGlobalWindow *aWindow, bool *aIsInterval,
case JSTYPE_STRING:
case JSTYPE_OBJECT:
{
JSString *str = ::JS_ValueToString(cx, argv[0]);
JS::Rooted<JS::Value> arg(cx, argv[0]);
JSString *str = JS::ToString(cx, arg);
if (!str)
return NS_ERROR_OUT_OF_MEMORY;

View File

@ -278,7 +278,8 @@ nsJSUtils::EvaluateString(JSContext* aCx,
}
if (ok && aEvaluateOptions.coerceToString && !aRetValue->isUndefined()) {
JSString* str = JS_ValueToString(aCx, *aRetValue);
JS::Rooted<JS::Value> value(aCx, *aRetValue);
JSString* str = JS::ToString(aCx, value);
ok = !!str;
*aRetValue = ok ? JS::StringValue(str) : JS::UndefinedValue();
}

View File

@ -241,9 +241,11 @@ nsScreen::GetLockOrientationPermission() const
}
NS_IMETHODIMP
nsScreen::MozLockOrientation(const JS::Value& aOrientation, JSContext* aCx,
nsScreen::MozLockOrientation(const JS::Value& aOrientation_, JSContext* aCx,
bool* aReturn)
{
JS::Rooted<JS::Value> aOrientation(aCx, aOrientation_);
if (aOrientation.isObject()) {
JS::Rooted<JSObject*> seq(aCx, &aOrientation.toObject());
if (IsArrayLike(aCx, seq)) {
@ -264,7 +266,7 @@ nsScreen::MozLockOrientation(const JS::Value& aOrientation, JSContext* aCx,
return NS_ERROR_FAILURE;
}
JS::Rooted<JSString*> jsString(aCx, JS_ValueToString(aCx, temp));
JS::Rooted<JSString*> jsString(aCx, JS::ToString(aCx, temp));
if (!jsString) {
return NS_ERROR_FAILURE;
}
@ -283,7 +285,7 @@ nsScreen::MozLockOrientation(const JS::Value& aOrientation, JSContext* aCx,
}
}
JS::Rooted<JSString*> jsString(aCx, JS_ValueToString(aCx, aOrientation));
JS::Rooted<JSString*> jsString(aCx, JS::ToString(aCx, aOrientation));
if (!jsString) {
return NS_ERROR_FAILURE;
}

View File

@ -2108,7 +2108,7 @@ ConvertJSValueToByteString(JSContext* cx, JS::Handle<JS::Value> v,
return true;
}
s = JS_ValueToString(cx, v);
s = JS::ToString(cx, v);
if (!s) {
return false;
}

View File

@ -900,11 +900,11 @@ EnumValueNotFound<true>(JSContext* cx, const jschar* chars, size_t length,
template<bool InvalidValueFatal>
inline int
FindEnumStringIndex(JSContext* cx, JS::Value v, const EnumEntry* values,
FindEnumStringIndex(JSContext* cx, JS::Handle<JS::Value> v, const EnumEntry* values,
const char* type, const char* sourceDescription, bool* ok)
{
// JS_StringEqualsAscii is slow as molasses, so don't use it here.
JSString* str = JS_ValueToString(cx, v);
JSString* str = JS::ToString(cx, v);
if (!str) {
*ok = false;
return 0;
@ -1550,7 +1550,7 @@ ConvertJSValueToString(JSContext* cx, JS::Handle<JS::Value> v,
return true;
}
s = JS_ValueToString(cx, v);
s = JS::ToString(cx, v);
if (!s) {
return false;
}

View File

@ -213,12 +213,12 @@ CreateGenericEvent(mozilla::dom::EventTarget* aEventOwner,
}
inline nsresult
GetInputStreamForJSVal(const JS::Value& aValue, JSContext* aCx,
GetInputStreamForJSVal(JS::Handle<JS::Value> aValue, JSContext* aCx,
nsIInputStream** aInputStream, uint64_t* aInputLength)
{
nsresult rv;
if (!JSVAL_IS_PRIMITIVE(aValue)) {
if (aValue.isObject()) {
JS::Rooted<JSObject*> obj(aCx, &aValue.toObject());
if (JS_IsArrayBufferObject(obj)) {
char* data = reinterpret_cast<char*>(JS_GetArrayBufferData(obj));
@ -246,14 +246,8 @@ GetInputStreamForJSVal(const JS::Value& aValue, JSContext* aCx,
}
}
JSString* jsstr;
if (JSVAL_IS_STRING(aValue)) {
jsstr = JSVAL_TO_STRING(aValue);
}
else {
jsstr = JS_ValueToString(aCx, aValue);
JSString* jsstr = JS::ToString(aCx, aValue);
NS_ENSURE_TRUE(jsstr, NS_ERROR_XPC_BAD_CONVERT_JS);
}
nsDependentJSString str;
if (!str.init(aCx, jsstr)) {
@ -864,10 +858,11 @@ LockedFile::WriteOrAppend(const JS::Value& aValue,
return NS_OK;
}
JS::Rooted<JS::Value> val(aCx, aValue);
nsCOMPtr<nsIInputStream> inputStream;
uint64_t inputLength;
nsresult rv =
GetInputStreamForJSVal(aValue, aCx, getter_AddRefs(inputStream),
GetInputStreamForJSVal(val, aCx, getter_AddRefs(inputStream),
&inputLength);
NS_ENSURE_SUCCESS(rv, rv);

View File

@ -255,8 +255,9 @@ KeyPath::Parse(JSContext* aCx, const mozilla::dom::Sequence<nsString>& aStrings,
// static
nsresult
KeyPath::Parse(JSContext* aCx, const JS::Value& aValue, KeyPath* aKeyPath)
KeyPath::Parse(JSContext* aCx, const JS::Value& aValue_, KeyPath* aKeyPath)
{
JS::Rooted<JS::Value> aValue(aCx, aValue_);
KeyPath keyPath(0);
aKeyPath->SetType(NONEXISTENT);
@ -283,7 +284,7 @@ KeyPath::Parse(JSContext* aCx, const JS::Value& aValue, KeyPath* aKeyPath)
JSString* jsstr;
nsDependentJSString str;
if (!JS_GetElement(aCx, obj, index, &val) ||
!(jsstr = JS_ValueToString(aCx, val)) ||
!(jsstr = JS::ToString(aCx, val)) ||
!str.init(aCx, jsstr)) {
return NS_ERROR_FAILURE;
}
@ -297,7 +298,7 @@ KeyPath::Parse(JSContext* aCx, const JS::Value& aValue, KeyPath* aKeyPath)
else if (!JSVAL_IS_NULL(aValue) && !JSVAL_IS_VOID(aValue)) {
JSString* jsstr;
nsDependentJSString str;
if (!(jsstr = JS_ValueToString(aCx, aValue)) ||
if (!(jsstr = JS::ToString(aCx, aValue)) ||
!str.init(aCx, jsstr)) {
return NS_ERROR_FAILURE;
}

View File

@ -110,7 +110,7 @@ static nsresult CompareDictionaries(JSContext* aCx, JSObject *aA,
bool success = JS_IdToValue(aCx, props[i], nameval.address());
NS_ENSURE_TRUE(success, NS_ERROR_UNEXPECTED);
JS::Rooted<JSString*> namestr(aCx, JS_ValueToString(aCx, nameval));
JS::Rooted<JSString*> namestr(aCx, JS::ToString(aCx, nameval));
NS_ENSURE_TRUE(namestr, NS_ERROR_UNEXPECTED);
aDifference->Assign(JS_GetStringCharsZ(aCx, namestr));
return NS_OK;

View File

@ -286,7 +286,7 @@ nsresult nsJSThunk::EvaluateScript(nsIChannel *aChannel,
sandboxObj = js::UncheckedUnwrap(sandboxObj);
JSAutoCompartment ac(cx, sandboxObj);
// Push our JSContext on the context stack so the JS_ValueToString call (and
// Push our JSContext on the context stack so the EvalInSandboxObject call (and
// JS_ReportPendingException, if relevant) will use the principal of cx.
nsCxPusher pusher;
pusher.Push(cx);

View File

@ -243,7 +243,7 @@ AutoMounterSetting::Observe(nsISupports* aSubject,
return NS_OK;
}
JSString *jsKey = JS_ValueToString(cx, key);
JSString *jsKey = JS::ToString(cx, key);
nsDependentJSString keyStr;
if (!keyStr.init(cx, jsKey)) {
return NS_OK;

View File

@ -1991,7 +1991,8 @@ XMLHttpRequest::Send(JSObject* aBody, ErrorResult& aRv)
valToClone.setObject(*aBody);
}
else {
JSString* bodyStr = JS_ValueToString(cx, OBJECT_TO_JSVAL(aBody));
JS::Rooted<JS::Value> obj(cx, JS::ObjectValue(*aBody));
JSString* bodyStr = JS::ToString(cx, obj);
if (!bodyStr) {
aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
return;

View File

@ -85,16 +85,12 @@ Environment(Handle<JSObject*> global)
}
static bool
Print(JSContext *cx,
unsigned argc,
JS::Value *vp)
Print(JSContext *cx, unsigned argc, JS::Value *vp)
{
unsigned i, n;
JSString *str;
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
JS::Value *argv = JS_ARGV(cx, vp);
for (i = n = 0; i < argc; i++) {
str = JS_ValueToString(cx, argv[i]);
for (unsigned i = 0; i < args.length(); i++) {
JSString *str = JS::ToString(cx, args[i]);
if (!str)
return false;
JSAutoByteString bytes(cx, str);
@ -103,10 +99,8 @@ Print(JSContext *cx,
fprintf(stdout, "%s%s", i ? " " : "", bytes.ptr());
fflush(stdout);
}
n++;
if (n)
fputc('\n', stdout);
JS_SET_RVAL(cx, vp, JSVAL_VOID);
args.rval().setUndefined();
return true;
}
@ -125,17 +119,14 @@ GetLine(char *bufp,
}
static bool
Dump(JSContext *cx,
unsigned argc,
JS::Value *vp)
Dump(JSContext *cx, unsigned argc, JS::Value *vp)
{
JS_SET_RVAL(cx, vp, JSVAL_VOID);
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
JSString *str;
if (!argc)
if (!args.length())
return true;
str = JS_ValueToString(cx, JS_ARGV(cx, vp)[0]);
JSString *str = JS::ToString(cx, args[0]);
if (!str)
return false;
JSAutoByteString bytes(cx, str);
@ -152,18 +143,16 @@ Load(JSContext *cx,
unsigned argc,
JS::Value *vp)
{
JS::Rooted<JS::Value> result(cx);
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
JS::Rooted<JSObject*> obj(cx, JS_THIS_OBJECT(cx, vp));
if (!obj)
return false;
JS::Value *argv = JS_ARGV(cx, vp);
for (unsigned i = 0; i < argc; i++) {
JSString *str = JS_ValueToString(cx, argv[i]);
for (unsigned i = 0; i < args.length(); i++) {
JS::Rooted<JSString*> str(cx, JS::ToString(cx, args[i]));
if (!str)
return false;
argv[i] = STRING_TO_JSVAL(str);
JSAutoByteString filename(cx, str);
if (!filename)
return false;
@ -183,11 +172,12 @@ Load(JSContext *cx,
if (!script)
return false;
JS::Rooted<JS::Value> result(cx);
if (!JS_ExecuteScript(cx, obj, script, result.address())) {
return false;
}
}
JS_SET_RVAL(cx, vp, JSVAL_VOID);
args.rval().setUndefined();
return true;
}
@ -391,9 +381,9 @@ XPCShellEnvironment::ProcessFile(JSContext *cx,
ok = JS_ExecuteScript(cx, obj, script, result.address());
if (ok && result != JSVAL_VOID) {
/* Suppress error reports from JS_ValueToString(). */
/* Suppress error reports from JS::ToString(). */
older = JS_SetErrorReporter(cx, nullptr);
str = JS_ValueToString(cx, result);
str = JS::ToString(cx, result);
JSAutoByteString bytes;
if (str)
bytes.encodeLatin1(cx, str);
@ -609,7 +599,7 @@ XPCShellEnvironment::EvaluateString(const nsString& aString,
bool ok = JS_ExecuteScript(cx, global, script, result.address());
if (ok && result != JSVAL_VOID) {
JSErrorReporter old = JS_SetErrorReporter(cx, nullptr);
JSString* str = JS_ValueToString(cx, result);
JSString* str = JS::ToString(cx, result);
nsDependentJSString depStr;
if (str)
depStr.init(cx, str);

View File

@ -129,7 +129,7 @@ JavaScriptShared::convertIdToGeckoString(JSContext *cx, JS::HandleId id, nsStrin
if (!JS_IdToValue(cx, id, idval.address()))
return false;
RootedString str(cx, JS_ValueToString(cx, idval));
RootedString str(cx, ToString(cx, idval));
if (!str)
return false;

View File

@ -486,7 +486,8 @@ jsd_ValToStringInStackFrame(JSDContext* jsdc,
JS_ASSERT(cx);
exceptionState = JS_SaveExceptionState(cx);
retval = JS_ValueToString(cx, val);
JS::RootedValue v(cx, val);
retval = JS::ToString(cx, v);
JS_RestoreExceptionState(cx, exceptionState);
return retval;

View File

@ -189,7 +189,8 @@ jsd_GetValueString(JSDContext* jsdc, JSDValue* jsdval)
{
JSAutoCompartment ac(cx, scopeObj);
AutoSaveExceptionState as(cx);
string = JS_ValueToString(cx, jsdval->val);
JS::RootedValue v(cx, jsdval->val);
string = JS::ToString(cx, v);
}
JSAutoCompartment ac2(cx, jsdc->glob);

View File

@ -273,7 +273,7 @@ GCParameter(JSContext *cx, unsigned argc, Value *vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
JSString *str = JS_ValueToString(cx, args.get(0));
JSString *str = ToString(cx, args.get(0));
if (!str)
return false;
@ -350,12 +350,13 @@ IsProxy(JSContext *cx, unsigned argc, Value *vp)
static bool
InternalConst(JSContext *cx, unsigned argc, jsval *vp)
{
if (argc != 1) {
CallArgs args = CallArgsFromVp(argc, vp);
if (args.length() == 0) {
JS_ReportError(cx, "the function takes exactly one argument");
return false;
}
JSString *str = JS_ValueToString(cx, vp[2]);
JSString *str = ToString(cx, args[0]);
if (!str)
return false;
JSFlatString *flat = JS_FlattenString(cx, str);
@ -684,6 +685,8 @@ static const struct TraceKindPair {
static bool
CountHeap(JSContext *cx, unsigned argc, jsval *vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
jsval v;
int32_t traceKind;
JSString *str;
@ -692,8 +695,8 @@ CountHeap(JSContext *cx, unsigned argc, jsval *vp)
size_t counter;
RootedValue startValue(cx, UndefinedValue());
if (argc > 0) {
v = JS_ARGV(cx, vp)[0];
if (args.length() > 0) {
v = args[0];
if (JSVAL_IS_TRACEABLE(v)) {
startValue = v;
} else if (!JSVAL_IS_NULL(v)) {
@ -705,8 +708,8 @@ CountHeap(JSContext *cx, unsigned argc, jsval *vp)
}
traceKind = -1;
if (argc > 1) {
str = JS_ValueToString(cx, JS_ARGV(cx, vp)[1]);
if (args.length() > 1) {
str = ToString(cx, args[0]);
if (!str)
return false;
JSFlatString *flatStr = JS_FlattenString(cx, str);

View File

@ -517,8 +517,7 @@ ArrayTypeRepresentation::appendStringArray(JSContext *cx, StringBuffer &contents
if (!contents.append(", "))
return false;
Value len = NumberValue(length());
if (!contents.append(JS_ValueToString(cx, len)))
if (!NumberValueToStringBuffer(cx, NumberValue(length()), contents))
return false;
if (!contents.append(")"))

View File

@ -6792,7 +6792,7 @@ CDataFinalizer::Methods::ToString(JSContext *cx, unsigned argc, jsval *vp)
} else if (!CDataFinalizer::GetValue(cx, objThis, value.address())) {
MOZ_ASSUME_UNREACHABLE("Could not convert an empty CDataFinalizer");
} else {
strMessage = JS_ValueToString(cx, value);
strMessage = ToString(cx, value);
if (!strMessage) {
return false;
}

View File

@ -8,7 +8,8 @@
BEGIN_TEST(testOOM)
{
JS::RootedString jsstr(cx, JS_ValueToString(cx, INT_TO_JSVAL(9)));
JS::RootedValue v(cx, JS::Int32Value(9));
JS::RootedString jsstr(cx, JS::ToString(cx, v));
mozilla::DebugOnly<const jschar *> s = JS_GetStringCharsZ(cx, jsstr);
JS_ASSERT(s[0] == '9' && s[1] == '\0');
return true;

View File

@ -210,7 +210,7 @@ class JSAPITest
JS::RootedValue v(cx);
JS_GetPendingException(cx, &v);
JS_ClearPendingException(cx);
JSString *s = JS_ValueToString(cx, v);
JSString *s = JS::ToString(cx, v);
if (s) {
JSAutoByteString bytes(cx, s);
if (!!bytes)
@ -237,9 +237,10 @@ class JSAPITest
static bool
print(JSContext *cx, unsigned argc, jsval *vp)
{
jsval *argv = JS_ARGV(cx, vp);
for (unsigned i = 0; i < argc; i++) {
JSString *str = JS_ValueToString(cx, argv[i]);
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
for (unsigned i = 0; i < args.length(); i++) {
JSString *str = JS::ToString(cx, args[i]);
if (!str)
return false;
char *bytes = JS_EncodeString(cx, str);
@ -251,7 +252,7 @@ class JSAPITest
putchar('\n');
fflush(stdout);
JS_SET_RVAL(cx, vp, JSVAL_VOID);
args.rval().setUndefined();
return true;
}

View File

@ -406,16 +406,6 @@ JS_ValueToConstructor(JSContext *cx, HandleValue value)
return ReportIfNotFunction(cx, value);
}
JS_PUBLIC_API(JSString *)
JS_ValueToString(JSContext *cx, jsval valueArg)
{
RootedValue value(cx, valueArg);
AssertHeapIsIdle(cx);
CHECK_REQUEST(cx);
assertSameCompartment(cx, value);
return ToString<CanGC>(cx, value);
}
JS_PUBLIC_API(JSString *)
JS_ValueToSource(JSContext *cx, jsval valueArg)
{

View File

@ -1042,9 +1042,6 @@ JS_ValueToFunction(JSContext *cx, JS::HandleValue v);
extern JS_PUBLIC_API(JSFunction *)
JS_ValueToConstructor(JSContext *cx, JS::HandleValue v);
extern JS_PUBLIC_API(JSString *)
JS_ValueToString(JSContext *cx, jsval v);
extern JS_PUBLIC_API(JSString *)
JS_ValueToSource(JSContext *cx, jsval v);
@ -1060,6 +1057,12 @@ ToNumberSlow(JSContext *cx, JS::Value v, double *dp);
*/
extern JS_PUBLIC_API(bool)
ToBooleanSlow(JS::HandleValue v);
/*
* DO NOT CALL THIS. Use JS::ToString
*/
extern JS_PUBLIC_API(JSString*)
ToStringSlow(JSContext *cx, JS::HandleValue v);
} /* namespace js */
namespace JS {
@ -1099,6 +1102,14 @@ ToBoolean(HandleValue v)
return js::ToBooleanSlow(v);
}
JS_ALWAYS_INLINE JSString*
ToString(JSContext *cx, HandleValue v)
{
if (v.isString())
return v.toString();
return js::ToStringSlow(cx, v);
}
} /* namespace JS */
extern JS_PUBLIC_API(bool)

View File

@ -3989,6 +3989,12 @@ js::ToStringSlow<CanGC>(ExclusiveContext *cx, HandleValue arg);
template JSString *
js::ToStringSlow<NoGC>(ExclusiveContext *cx, Value arg);
JS_PUBLIC_API(JSString *)
js::ToStringSlow(JSContext *cx, HandleValue v)
{
return ToStringSlow<CanGC>(cx, v);
}
JSString *
js::ValueToSource(JSContext *cx, HandleValue v)
{

View File

@ -207,43 +207,6 @@ extern JS_EXPORT_API(void) add_history(char *line);
} // extern "C"
#endif
static void
ReportException(JSContext *cx)
{
if (JS_IsExceptionPending(cx)) {
if (!JS_ReportPendingException(cx))
JS_ClearPendingException(cx);
}
}
class ToStringHelper
{
public:
ToStringHelper(JSContext *aCx, HandleValue v, bool aThrow = false)
: cx(aCx), mStr(cx, JS_ValueToString(cx, v))
{
if (!aThrow && !mStr)
ReportException(cx);
}
ToStringHelper(JSContext *aCx, HandleId id, bool aThrow = false)
: cx(aCx), mStr(cx, JS_ValueToString(cx, IdToValue(id)))
{
if (!aThrow && !mStr)
ReportException(cx);
}
bool threw() { return !mStr; }
jsval getJSVal() { return STRING_TO_JSVAL(mStr); }
const char *getBytes() {
if (mStr && (mBytes.ptr() || mBytes.encodeLatin1(cx, mStr)))
return mBytes.ptr();
return "(error converting value)";
}
private:
JSContext *cx;
RootedString mStr; // Objects of this class are always stack-allocated.
JSAutoByteString mBytes;
};
static char *
GetLine(FILE *file, const char * prompt)
{
@ -693,7 +656,7 @@ Options(JSContext *cx, unsigned argc, jsval *vp)
JS::ContextOptions oldOptions = JS::ContextOptionsRef(cx);
for (unsigned i = 0; i < args.length(); i++) {
JSString *str = JS_ValueToString(cx, args[i]);
JSString *str = JS::ToString(cx, args[i]);
if (!str)
return false;
args[i].setString(str);
@ -768,7 +731,7 @@ LoadScript(JSContext *cx, unsigned argc, jsval *vp, bool scriptRelative)
RootedString str(cx);
for (unsigned i = 0; i < args.length(); i++) {
str = JS_ValueToString(cx, args[i]);
str = JS::ToString(cx, args[i]);
if (!str) {
JS_ReportErrorNumber(cx, my_GetErrorMessage, nullptr, JSSMSG_INVALID_ARGS, "load");
return false;
@ -934,7 +897,7 @@ Evaluate(JSContext *cx, unsigned argc, jsval *vp)
if (v.isNull()) {
fileName = nullptr;
} else if (!v.isUndefined()) {
JSString *s = JS_ValueToString(cx, v);
JSString *s = ToString(cx, v);
if (!s)
return false;
fileName = fileNameBytes.encodeLatin1(cx, s);
@ -950,7 +913,7 @@ Evaluate(JSContext *cx, unsigned argc, jsval *vp)
if (!JS_GetProperty(cx, opts, "sourceURL", &v))
return false;
if (!v.isUndefined()) {
sourceURL = JS_ValueToString(cx, v);
sourceURL = ToString(cx, v);
if (!sourceURL)
return false;
}
@ -958,7 +921,7 @@ Evaluate(JSContext *cx, unsigned argc, jsval *vp)
if (!JS_GetProperty(cx, opts, "sourceMapURL", &v))
return false;
if (!v.isUndefined()) {
sourceMapURL = JS_ValueToString(cx, v);
sourceMapURL = ToString(cx, v);
if (!sourceMapURL)
return false;
}
@ -1000,7 +963,7 @@ Evaluate(JSContext *cx, unsigned argc, jsval *vp)
if (!JS_GetProperty(cx, opts, "sourcePolicy", &v))
return false;
if (!v.isUndefined()) {
JSString *s = JS_ValueToString(cx, v);
JSString *s = ToString(cx, v);
if (!s)
return false;
char *policy = JS_EncodeStringToUTF8(cx, s);
@ -1185,7 +1148,7 @@ Run(JSContext *cx, unsigned argc, jsval *vp)
if (!thisobj)
return false;
JSString *str = JS_ValueToString(cx, args[0]);
JSString *str = JS::ToString(cx, args[0]);
if (!str)
return false;
args[0].setString(str);
@ -1308,7 +1271,7 @@ PutStr(JSContext *cx, unsigned argc, jsval *vp)
CallArgs args = CallArgsFromVp(argc, vp);
if (args.length() != 0) {
JSString *str = JS_ValueToString(cx, args[0]);
JSString *str = JS::ToString(cx, args[0]);
if (!str)
return false;
char *bytes = JSStringToUTF8(cx, str);
@ -1336,7 +1299,7 @@ static bool
PrintInternal(JSContext *cx, const CallArgs &args, FILE *file)
{
for (unsigned i = 0; i < args.length(); i++) {
JSString *str = JS_ValueToString(cx, args[i]);
JSString *str = JS::ToString(cx, args[i]);
if (!str)
return false;
char *bytes = JSStringToUTF8(cx, str);
@ -1565,7 +1528,7 @@ Trap(JSContext *cx, unsigned argc, jsval *vp)
return false;
}
argc = args.length() - 1;
RootedString str(cx, JS_ValueToString(cx, args[argc]));
RootedString str(cx, JS::ToString(cx, args[argc]));
if (!str)
return false;
args[argc].setString(str);
@ -1610,7 +1573,7 @@ SetDebuggerHandler(JSContext *cx, unsigned argc, jsval *vp)
return false;
}
JSString *str = JS_ValueToString(cx, args[0]);
JSString *str = JS::ToString(cx, args[0]);
if (!str)
return false;
@ -1630,7 +1593,7 @@ SetThrowHook(JSContext *cx, unsigned argc, jsval *vp)
return false;
}
str = JS_ValueToString(cx, args[0]);
str = JS::ToString(cx, args[0]);
if (!str)
return false;
@ -2033,7 +1996,8 @@ DisassFile(JSContext *cx, unsigned argc, jsval *vp)
if (!thisobj)
return false;
JSString *str = JS_ValueToString(cx, p.argv[0]);
// We should change DisassembleOptionParser to store CallArgs.
JSString *str = JS::ToString(cx, HandleValue::fromMarkedLocation(&p.argv[0]));
if (!str)
return false;
JSAutoByteString filename(cx, str);
@ -2170,7 +2134,7 @@ DumpHeap(JSContext *cx, unsigned argc, jsval *vp)
JSAutoByteString fileName;
if (args.hasDefined(0)) {
RootedString str(cx, JS_ValueToString(cx, args[0]));
RootedString str(cx, JS::ToString(cx, args[0]));
if (!str)
return false;
@ -2269,7 +2233,7 @@ static bool
Intern(JSContext *cx, unsigned argc, jsval *vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
JSString *str = JS_ValueToString(cx, args.length() == 0 ? UndefinedValue() : args[0]);
JSString *str = JS::ToString(cx, args.get(0));
if (!str)
return false;
@ -3413,7 +3377,7 @@ ReadFile(JSContext *cx, unsigned argc, jsval *vp, bool scriptRelative)
return false;
if (args.length() > 1) {
JSString *opt = JS_ValueToString(cx, args[1]);
JSString *opt = JS::ToString(cx, args[1]);
if (!opt)
return false;
bool match;
@ -3495,24 +3459,24 @@ RedirectOutput(JSContext *cx, unsigned argc, jsval *vp)
static bool
System(JSContext *cx, unsigned argc, jsval *vp)
{
JSString *str;
CallArgs args = CallArgsFromVp(argc, vp);
if (argc != 1) {
if (args.length() == 0) {
JS_ReportErrorNumber(cx, my_GetErrorMessage, nullptr, JSSMSG_INVALID_ARGS,
"system");
return false;
}
str = JS_ValueToString(cx, JS_ARGV(cx, vp)[0]);
JSString *str = JS::ToString(cx, args[0]);
if (!str)
return false;
JSAutoByteString command(cx, str);
if (!command)
return false;
int result = system(command.ptr());
JS_SET_RVAL(cx, vp, Int32Value(result));
args.rval().setInt32(result);
return true;
}
@ -3632,7 +3596,7 @@ NestedShell(JSContext *cx, unsigned argc, jsval *vp)
// The arguments to nestedShell are stringified and append to argv.
RootedString str(cx);
for (unsigned i = 0; i < args.length(); i++) {
str = JS_ValueToString(cx, args[i]);
str = ToString(cx, args[i]);
if (!str || !argv.append(JS_EncodeString(cx, str)))
return false;
@ -3929,7 +3893,7 @@ class ShellSourceHook: public SourceHook {
1, filenameValue.address(), &result))
return false;
str = JS_ValueToString(cx, result);
str = JS::ToString(cx, result);
if (!str)
return false;
@ -4500,6 +4464,8 @@ my_ErrorReporter(JSContext *cx, const char *message, JSErrorReport *report)
static bool
Exec(JSContext *cx, unsigned argc, jsval *vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
JSFunction *fun;
const char *name, **nargv;
unsigned i, nargc;
@ -4527,7 +4493,7 @@ Exec(JSContext *cx, unsigned argc, jsval *vp)
nargv[0] = name;
jsval *argv = JS_ARGV(cx, vp);
for (i = 0; i < nargc; i++) {
str = (i == 0) ? fun->atom : JS_ValueToString(cx, argv[i-1]);
str = (i == 0) ? fun->atom : JS::ToString(cx, args[i-1]);
if (!str) {
ok = false;
goto done;
@ -4654,15 +4620,21 @@ env_setProperty(JSContext *cx, HandleObject obj, HandleId id, bool strict, Mutab
#if !defined XP_OS2 && !defined SOLARIS
int rv;
ToStringHelper idstr(cx, id, true);
if (idstr.threw())
RootedValue idvalue(cx, IdToValue(id));
JSAutoByteString idstr;
if (!idstr.encodeLatin1(cx, idvalue.toString()))
return false;
ToStringHelper valstr(cx, vp, true);
if (valstr.threw())
RootedString value(cx, ToString(cx, vp));
if (!value)
return false;
JSAutoByteString valstr;
if (!valstr.encodeLatin1(cx, value))
return false;
#if defined XP_WIN || defined HPUX || defined OSF1
{
char *waste = JS_smprintf("%s=%s", idstr.getBytes(), valstr.getBytes());
char *waste = JS_smprintf("%s=%s", idstr.ptr(), valstr.ptr());
if (!waste) {
JS_ReportOutOfMemory(cx);
return false;
@ -4680,13 +4652,13 @@ env_setProperty(JSContext *cx, HandleObject obj, HandleId id, bool strict, Mutab
#endif
}
#else
rv = setenv(idstr.getBytes(), valstr.getBytes(), 1);
rv = setenv(idstr.ptr(), valstr.ptr(), 1);
#endif
if (rv < 0) {
JS_ReportError(cx, "can't set env variable %s to %s", idstr.getBytes(), valstr.getBytes());
JS_ReportError(cx, "can't set env variable %s to %s", idstr.ptr(), valstr.ptr());
return false;
}
vp.set(valstr.getJSVal());
vp.set(StringValue(value));
#endif /* !defined XP_OS2 && !defined SOLARIS */
return true;
}
@ -4723,17 +4695,15 @@ static bool
env_resolve(JSContext *cx, HandleObject obj, HandleId id, unsigned flags,
MutableHandleObject objp)
{
JSString *valstr;
const char *name, *value;
ToStringHelper idstr(cx, id, true);
if (idstr.threw())
RootedValue idvalue(cx, IdToValue(id));
JSAutoByteString idstr;
if (!idstr.encodeLatin1(cx, idvalue.toString()))
return false;
name = idstr.getBytes();
value = getenv(name);
const char *name = idstr.ptr();
const char *value = getenv(name);
if (value) {
valstr = JS_NewStringCopyZ(cx, value);
RootedString valstr(cx, JS_NewStringCopyZ(cx, value));
if (!valstr)
return false;
if (!JS_DefineProperty(cx, obj, name, STRING_TO_JSVAL(valstr),

View File

@ -4337,7 +4337,7 @@ DebuggerGenericEval(JSContext *cx, const char *fullMethodName, const Value &code
if (!JS_GetProperty(cx, opts, "url", &v))
return false;
if (!v.isUndefined()) {
RootedString url_str(cx, JS_ValueToString(cx, v));
RootedString url_str(cx, ToString<CanGC>(cx, v));
if (!url_str)
return false;
url = JS_EncodeString(cx, url_str);

View File

@ -106,13 +106,14 @@ static PRLogModuleInfo *gJSCLLog;
#define ERROR_SETTING_SYMBOL "%s - Could not set symbol '%s' on target object."
static bool
Dump(JSContext *cx, unsigned argc, jsval *vp)
Dump(JSContext *cx, unsigned argc, Value *vp)
{
JSString *str;
if (!argc)
CallArgs args = CallArgsFromVp(argc, vp);
if (args.length() == 0)
return true;
str = JS_ValueToString(cx, JS_ARGV(cx, vp)[0]);
JSString *str = JS::ToString(cx, args[0]);
if (!str)
return false;

View File

@ -80,11 +80,12 @@ xpc::NewSandboxConstructor()
static bool
SandboxDump(JSContext *cx, unsigned argc, jsval *vp)
{
JSString *str;
if (!argc)
CallArgs args = CallArgsFromVp(argc, vp);
if (args.length() == 0)
return true;
str = JS_ValueToString(cx, JS_ARGV(cx, vp)[0]);
RootedString str(cx, ToString(cx, args[0]));
if (!str)
return false;
@ -111,7 +112,7 @@ SandboxDump(JSContext *cx, unsigned argc, jsval *vp)
fputs(cstr, stdout);
fflush(stdout);
NS_Free(cstr);
JS_SET_RVAL(cx, vp, JSVAL_TRUE);
args.rval().setBoolean(true);
return true;
}
@ -138,7 +139,7 @@ SandboxImport(JSContext *cx, unsigned argc, Value *vp)
RootedString funname(cx);
if (args.length() > 1) {
// Use the second parameter as the function name.
funname = JS_ValueToString(cx, args[1]);
funname = ToString(cx, args[1]);
if (!funname)
return false;
} else {
@ -1640,7 +1641,7 @@ xpc::EvalInSandbox(JSContext *cx, HandleObject sandboxArg, const nsAString& sour
PromiseFlatString(source).get(), source.Length(),
v.address());
if (ok && returnStringOnly && !v.isUndefined()) {
JSString *str = JS_ValueToString(sandcx, v);
JSString *str = ToString(sandcx, v);
ok = !!str;
v = ok ? JS::StringValue(str) : JS::UndefinedValue();
}
@ -1652,7 +1653,7 @@ xpc::EvalInSandbox(JSContext *cx, HandleObject sandboxArg, const nsAString& sour
if (returnStringOnly) {
// The caller asked for strings only, convert the
// exception into a string.
JSString *str = JS_ValueToString(sandcx, exn);
JSString *str = ToString(sandcx, exn);
exn = str ? JS::StringValue(str) : JS::UndefinedValue();
}
}

View File

@ -1576,7 +1576,7 @@ nsXPCComponents_ID::CallOrConstruct(nsIXPConnectWrappedNative *wrapper,
JSAutoByteString bytes;
nsID id;
if (!(jsstr = JS_ValueToString(cx, args[0])) ||
if (!(jsstr = ToString(cx, args[0])) ||
!bytes.encodeLatin1(cx, jsstr) ||
!id.Parse(bytes.ptr())) {
return ThrowAndFail(NS_ERROR_XPC_BAD_ID_STRING, cx, _retval);
@ -1837,7 +1837,7 @@ struct MOZ_STACK_CLASS ExceptionArgParser
*/
bool parseMessage(HandleValue v) {
JSString *str = JS_ValueToString(cx, v);
JSString *str = ToString(cx, v);
if (!str)
return false;
eMsg = messageBytes.encodeLatin1(cx, str);
@ -2450,7 +2450,7 @@ nsXPCComponents_Constructor::CallOrConstruct(nsIXPConnectWrappedNative *wrapper,
if (args.length() >= 3) {
// args[2] is an initializer function or property name
RootedString str(cx, JS_ValueToString(cx, args[2]));
RootedString str(cx, ToString(cx, args[2]));
if (!str || !(cInitializer = cInitializerBytes.encodeLatin1(cx, str)))
return ThrowAndFail(NS_ERROR_XPC_BAD_CONVERT_JS, cx, _retval);
}
@ -2476,7 +2476,7 @@ nsXPCComponents_Constructor::CallOrConstruct(nsIXPConnectWrappedNative *wrapper,
return ThrowAndFail(NS_ERROR_XPC_UNEXPECTED, cx, _retval);
}
RootedString str(cx, JS_ValueToString(cx, args[1]));
RootedString str(cx, ToString(cx, args[1]));
RootedId id(cx);
if (!str || !JS_ValueToId(cx, StringValue(str), id.address()))
return ThrowAndFail(NS_ERROR_XPC_BAD_CONVERT_JS, cx, _retval);
@ -2525,7 +2525,7 @@ nsXPCComponents_Constructor::CallOrConstruct(nsIXPConnectWrappedNative *wrapper,
return ThrowAndFail(NS_ERROR_XPC_UNEXPECTED, cx, _retval);
}
RootedString str(cx, JS_ValueToString(cx, args[0]));
RootedString str(cx, ToString(cx, args[0]));
RootedId id(cx);
if (!str || !JS_ValueToId(cx, StringValue(str), id.address()))
return ThrowAndFail(NS_ERROR_XPC_BAD_CONVERT_JS, cx, _retval);
@ -2665,7 +2665,7 @@ nsXPCComponents_Utils::ReportError(const Value &errorArg, JSContext *cx)
}
// It's not a JS Error object, so we synthesize as best we're able.
RootedString msgstr(cx, JS_ValueToString(cx, error));
RootedString msgstr(cx, ToString(cx, error));
if (!msgstr)
return NS_OK;
@ -2698,7 +2698,7 @@ nsXPCComponents_Utils::ReportError(const Value &errorArg, JSContext *cx)
NS_IMETHODIMP
nsXPCComponents_Utils::EvalInSandbox(const nsAString& source,
const Value& sandboxValArg,
const Value& version,
const Value& versionArg,
const Value& filenameVal,
int32_t lineNumber,
JSContext *cx,
@ -2706,6 +2706,7 @@ nsXPCComponents_Utils::EvalInSandbox(const nsAString& source,
Value *retval)
{
RootedValue sandboxVal(cx, sandboxValArg);
RootedValue version(cx, versionArg);
RootedObject sandbox(cx);
if (!JS_ValueToObject(cx, sandboxVal, &sandbox) || !sandbox)
return NS_ERROR_INVALID_ARG;
@ -2713,7 +2714,7 @@ nsXPCComponents_Utils::EvalInSandbox(const nsAString& source,
// Optional third argument: JS version, as a string.
JSVersion jsVersion = JSVERSION_DEFAULT;
if (optionalArgc >= 1) {
JSString *jsVersionStr = JS_ValueToString(cx, version);
JSString *jsVersionStr = ToString(cx, version);
if (!jsVersionStr)
return NS_ERROR_INVALID_ARG;
@ -2737,7 +2738,8 @@ nsXPCComponents_Utils::EvalInSandbox(const nsAString& source,
nsXPIDLCString filename;
int32_t lineNo = (optionalArgc >= 3) ? lineNumber : 1;
if (optionalArgc >= 2) {
JSString *filenameStr = JS_ValueToString(cx, filenameVal);
RootedValue value(cx, filenameVal);
JSString *filenameStr = ToString(cx, value);
if (!filenameStr)
return NS_ERROR_INVALID_ARG;

View File

@ -410,7 +410,7 @@ XPCConvert::JSData2Native(void* d, HandleValue s,
return ConvertToPrimitive(cx, s, static_cast<bool*>(d));
case nsXPTType::T_CHAR :
{
JSString* str = JS_ValueToString(cx, s);
JSString* str = ToString(cx, s);
if (!str) {
return false;
}
@ -429,7 +429,7 @@ XPCConvert::JSData2Native(void* d, HandleValue s,
case nsXPTType::T_WCHAR :
{
JSString* str;
if (!(str = JS_ValueToString(cx, s))) {
if (!(str = ToString(cx, s))) {
return false;
}
size_t length;
@ -495,7 +495,7 @@ XPCConvert::JSData2Native(void* d, HandleValue s,
length = 0;
}
} else if (!JSVAL_IS_NULL(s)) {
str = JS_ValueToString(cx, s);
str = ToString(cx, s);
if (!str)
return false;
@ -559,7 +559,7 @@ XPCConvert::JSData2Native(void* d, HandleValue s,
return true;
}
JSString* str = JS_ValueToString(cx, s);
JSString* str = ToString(cx, s);
if (!str) {
return false;
}
@ -600,7 +600,7 @@ XPCConvert::JSData2Native(void* d, HandleValue s,
return true;
}
if (!(str = JS_ValueToString(cx, s))) {
if (!(str = ToString(cx, s))) {
return false;
}
if (!(chars = JS_GetStringCharsZ(cx, str))) {
@ -643,7 +643,7 @@ XPCConvert::JSData2Native(void* d, HandleValue s,
// The JS val is neither null nor void...
if (!(str = JS_ValueToString(cx, s))||
if (!(str = ToString(cx, s))||
!(chars = JS_GetStringCharsZ(cx, str))) {
return false;
}
@ -686,7 +686,7 @@ XPCConvert::JSData2Native(void* d, HandleValue s,
}
// The JS val is neither null nor void...
JSString* str = JS_ValueToString(cx, s);
JSString* str = ToString(cx, s);
if (!str) {
return false;
}
@ -1164,7 +1164,7 @@ XPCConvert::JSValToXPCException(MutableHandleValue s,
if (nullptr != (report = JS_ErrorFromException(cx, s))) {
JSAutoByteString message;
JSString* str;
if (nullptr != (str = JS_ValueToString(cx, s)))
if (nullptr != (str = ToString(cx, s)))
message.encodeLatin1(cx, str);
return JSErrorToXPCException(message.ptr(), ifaceName,
methodName, report, exceptn);
@ -1201,7 +1201,7 @@ XPCConvert::JSValToXPCException(MutableHandleValue s,
// otherwise we'll just try to convert it to a string
JSString* str = JS_ValueToString(cx, s);
JSString* str = ToString(cx, s);
if (!str)
return NS_ERROR_FAILURE;
@ -1272,7 +1272,7 @@ XPCConvert::JSValToXPCException(MutableHandleValue s,
// otherwise we'll just try to convert it to a string
// Note: e.g., bools get converted to JSStrings by this code.
JSString* str = JS_ValueToString(cx, s);
JSString* str = ToString(cx, s);
if (str) {
JSAutoByteString strBytes(cx, str);
if (!!strBytes) {
@ -1793,7 +1793,7 @@ XPCConvert::JSStringWithSize2Native(void* d, HandleValue s,
return true;
}
JSString* str = JS_ValueToString(cx, s);
JSString* str = ToString(cx, s);
if (!str) {
return false;
}
@ -1848,7 +1848,7 @@ XPCConvert::JSStringWithSize2Native(void* d, HandleValue s,
return true;
}
if (!(str = JS_ValueToString(cx, s))) {
if (!(str = ToString(cx, s))) {
return false;
}

View File

@ -106,7 +106,7 @@ xpc_DumpEvalInJSStackFrame(JSContext* cx, uint32_t frameno, const char* text)
JSString* str;
JSAutoByteString bytes;
if (frame.evaluateInStackFrame(cx, text, strlen(text), "eval", 1, &rval) &&
nullptr != (str = JS_ValueToString(cx, rval)) &&
nullptr != (str = ToString(cx, rval)) &&
bytes.encodeLatin1(cx, str)) {
DebugDump("%s\n", bytes.ptr());
} else

View File

@ -748,46 +748,19 @@ xpc_qsUnwrapArgImpl(JSContext *cx,
}
bool
xpc_qsJsvalToCharStr(JSContext *cx, jsval v, JSAutoByteString *bytes)
xpc_qsJsvalToCharStr(JSContext *cx, HandleValue v, JSAutoByteString *bytes)
{
JSString *str;
MOZ_ASSERT(!bytes->ptr());
if (JSVAL_IS_STRING(v)) {
str = JSVAL_TO_STRING(v);
} else if (JSVAL_IS_VOID(v) || JSVAL_IS_NULL(v)) {
if (v.isNullOrUndefined())
return true;
} else {
if (!(str = JS_ValueToString(cx, v)))
JSString *str = ToString(cx, v);
if (!str)
return false;
}
return !!bytes->encodeLatin1(cx, str);
}
bool
xpc_qsJsvalToWcharStr(JSContext *cx, jsval v, jsval *pval, const PRUnichar **pstr)
{
JSString *str;
if (JSVAL_IS_STRING(v)) {
str = JSVAL_TO_STRING(v);
} else if (JSVAL_IS_VOID(v) || JSVAL_IS_NULL(v)) {
*pstr = nullptr;
return true;
} else {
if (!(str = JS_ValueToString(cx, v)))
return false;
*pval = STRING_TO_JSVAL(str); // Root the new string.
}
const jschar *chars = JS_GetStringCharsZ(cx, str);
if (!chars)
return false;
*pstr = static_cast<const PRUnichar *>(chars);
return true;
}
namespace xpc {
bool

View File

@ -227,7 +227,7 @@ protected:
* when |v| is JSVAL_IS_NULL and JSVAL_IS_VOID respectively.
*/
template<class traits>
JSString* InitOrStringify(JSContext* cx, jsval v,
JSString* InitOrStringify(JSContext* cx, JS::HandleValue v,
JS::MutableHandleValue pval,
bool notpassed,
StringificationBehavior nullBehavior,
@ -255,7 +255,7 @@ protected:
return nullptr;
}
s = JS_ValueToString(cx, v);
s = JS::ToString(cx, v);
if (!s) {
mValid = false;
return nullptr;

View File

@ -211,18 +211,20 @@ GetLine(JSContext *cx, char *bufp, FILE *file, const char *prompt) {
static bool
ReadLine(JSContext *cx, unsigned argc, jsval *vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
// While 4096 might be quite arbitrary, this is something to be fixed in
// bug 105707. It is also the same limit as in ProcessFile.
char buf[4096];
JSString *str;
RootedString str(cx);
/* If a prompt was specified, construct the string */
if (argc > 0) {
str = JS_ValueToString(cx, JS_ARGV(cx, vp)[0]);
if (args.length() > 0) {
str = JS::ToString(cx, args[0]);
if (!str)
return false;
} else {
str = JSVAL_TO_STRING(JS_GetEmptyStringValue(cx));
str = JS_GetEmptyString(JS_GetRuntime(cx));
}
/* Get a line from the infile */
@ -253,12 +255,11 @@ ReadLine(JSContext *cx, unsigned argc, jsval *vp)
static bool
Print(JSContext *cx, unsigned argc, jsval *vp)
{
unsigned i, n;
JSString *str;
CallArgs args = CallArgsFromVp(argc, vp);
jsval *argv = JS_ARGV(cx, vp);
for (i = n = 0; i < argc; i++) {
str = JS_ValueToString(cx, argv[i]);
RootedString str(cx);
for (unsigned i = 0; i < args.length(); i++) {
str = ToString(cx, args[i]);
if (!str)
return false;
JSAutoByteString strBytes(cx, str);
@ -267,23 +268,22 @@ Print(JSContext *cx, unsigned argc, jsval *vp)
fprintf(gOutFile, "%s%s", i ? " " : "", strBytes.ptr());
fflush(gOutFile);
}
n++;
if (n)
fputc('\n', gOutFile);
JS_SET_RVAL(cx, vp, JSVAL_VOID);
args.rval().setUndefined();
return true;
}
static bool
Dump(JSContext *cx, unsigned argc, jsval *vp)
{
JS_SET_RVAL(cx, vp, JSVAL_VOID);
CallArgs args = CallArgsFromVp(argc, vp);
JSString *str;
if (!argc)
args.rval().setUndefined();
if (!args.length())
return true;
str = JS_ValueToString(cx, JS_ARGV(cx, vp)[0]);
RootedString str(cx, ToString(cx, args[0]));
if (!str)
return false;
@ -302,16 +302,17 @@ Dump(JSContext *cx, unsigned argc, jsval *vp)
static bool
Load(JSContext *cx, unsigned argc, jsval *vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
JS::Rooted<JSObject*> obj(cx, JS_THIS_OBJECT(cx, vp));
if (!obj)
return false;
jsval *argv = JS_ARGV(cx, vp);
for (unsigned i = 0; i < argc; i++) {
JSString *str = JS_ValueToString(cx, argv[i]);
RootedString str(cx);
for (unsigned i = 0; i < args.length(); i++) {
str = ToString(cx, args[i]);
if (!str)
return false;
argv[i] = STRING_TO_JSVAL(str);
JSAutoByteString filename(cx, str);
if (!filename)
return false;
@ -335,7 +336,7 @@ Load(JSContext *cx, unsigned argc, jsval *vp)
if (!compileOnly && !JS_ExecuteScript(cx, obj, script, result.address()))
return false;
}
JS_SET_RVAL(cx, vp, JSVAL_VOID);
args.rval().setUndefined();
return true;
}
@ -430,33 +431,32 @@ GCZeal(JSContext *cx, unsigned argc, jsval *vp)
#endif
static bool
SendCommand(JSContext* cx,
unsigned argc,
jsval* vp)
SendCommand(JSContext *cx, unsigned argc, Value *vp)
{
if (argc == 0) {
CallArgs args = CallArgsFromVp(argc, vp);
if (args.length() == 0) {
JS_ReportError(cx, "Function takes at least one argument!");
return false;
}
jsval *argv = JS_ARGV(cx, vp);
JSString* str = JS_ValueToString(cx, argv[0]);
JSString* str = ToString(cx, args[0]);
if (!str) {
JS_ReportError(cx, "Could not convert argument 1 to string!");
return false;
}
if (argc > 1 && JS_TypeOfValue(cx, argv[1]) != JSTYPE_FUNCTION) {
if (args.length() > 1 && JS_TypeOfValue(cx, args[1]) != JSTYPE_FUNCTION) {
JS_ReportError(cx, "Could not convert argument 2 to function!");
return false;
}
if (!XRE_SendTestShellCommand(cx, str, argc > 1 ? &argv[1] : nullptr)) {
if (!XRE_SendTestShellCommand(cx, str, args.length() > 1 ? args[1].address() : nullptr)) {
JS_ReportError(cx, "Couldn't send command!");
return false;
}
JS_SET_RVAL(cx, vp, JSVAL_VOID);
args.rval().setUndefined();
return true;
}
@ -467,7 +467,7 @@ Options(JSContext *cx, unsigned argc, jsval *vp)
ContextOptions oldOptions = ContextOptionsRef(cx);
for (unsigned i = 0; i < argc; ++i) {
JSString *str = JS_ValueToString(cx, args[i]);
JSString *str = ToString(cx, args[i]);
if (!str)
return false;
@ -731,12 +731,12 @@ env_setProperty(JSContext *cx, HandleObject obj, HandleId id, bool strict, Mutab
JS::Rooted<JSString*> idstr(cx);
int rv;
jsval idval;
if (!JS_IdToValue(cx, id, &idval))
RootedValue idval(cx);
if (!JS_IdToValue(cx, id, idval.address()))
return false;
idstr = JS_ValueToString(cx, idval);
valstr = JS_ValueToString(cx, vp);
idstr = ToString(cx, idval);
valstr = ToString(cx, vp);
if (!idstr || !valstr)
return false;
JSAutoByteString name(cx, idstr);
@ -814,11 +814,11 @@ env_resolve(JSContext *cx, HandleObject obj, HandleId id, unsigned flags,
{
JSString *idstr, *valstr;
jsval idval;
if (!JS_IdToValue(cx, id, &idval))
RootedValue idval(cx);
if (!JS_IdToValue(cx, id, idval.address()))
return false;
idstr = JS_ValueToString(cx, idval);
idstr = ToString(cx, idval);
if (!idstr)
return false;
JSAutoByteString name(cx, idstr);
@ -954,9 +954,9 @@ ProcessFile(JSContext *cx, JS::Handle<JSObject*> obj, const char *filename, FILE
if (!compileOnly) {
ok = JS_ExecuteScript(cx, obj, script, result.address());
if (ok && result != JSVAL_VOID) {
/* Suppress error reports from JS_ValueToString(). */
/* Suppress error reports from JS::ToString(). */
older = JS_SetErrorReporter(cx, nullptr);
str = JS_ValueToString(cx, result);
str = ToString(cx, result);
JS_SetErrorReporter(cx, older);
JSAutoByteString bytes;
if (str && bytes.encodeLatin1(cx, str))

View File

@ -388,7 +388,7 @@ nsXPCWrappedJSClass::BuildPropertyEnumerator(XPCCallContext& ccx,
if (!JS_IdToValue(cx, idName, jsvalName.address()))
return NS_ERROR_FAILURE;
JSString* name = JS_ValueToString(cx, jsvalName);
JSString* name = ToString(cx, jsvalName);
if (!name)
return NS_ERROR_FAILURE;

View File

@ -454,11 +454,6 @@ argumentUnboxingTemplates = {
" return false;\n"
" char *${name} = ${name}_bytes.ptr();\n",
'wstring':
" const PRUnichar *${name};\n"
" if (!xpc_qsJsvalToWcharStr(cx, ${argVal}, ${argPtr}, &${name}))\n"
" return false;\n",
'[cstring]':
" xpc_qsACString ${name}(cx, ${argVal}, ${argPtr}, ${notPassed});\n"
" if (!${name}.IsValid())\n"

View File

@ -957,7 +957,8 @@ cryptojs_ReadArgsAndGenerateKey(JSContext *cx,
}
keySize = JSVAL_TO_INT(argv[0]);
if (!JSVAL_IS_NULL(argv[1])) {
jsString = JS_ValueToString(cx,argv[1]);
JS::Rooted<JS::Value> v(cx, argv[1]);
jsString = JS::ToString(cx, v);
NS_ENSURE_TRUE(jsString, NS_ERROR_OUT_OF_MEMORY);
argv[1] = STRING_TO_JSVAL(jsString);
params.encodeLatin1(cx, jsString);
@ -969,7 +970,8 @@ cryptojs_ReadArgsAndGenerateKey(JSContext *cx,
"key generation type not specified");
return NS_ERROR_FAILURE;
}
jsString = JS_ValueToString(cx, argv[2]);
JS::Rooted<JS::Value> v(cx, argv[2]);
jsString = JS::ToString(cx, v);
NS_ENSURE_TRUE(jsString, NS_ERROR_OUT_OF_MEMORY);
argv[2] = STRING_TO_JSVAL(jsString);
nsDependentJSString dependentKeyGenAlg;