diff --git a/js/src/jsatominlines.h b/js/src/jsatominlines.h index ab91f974d1..0d8c5a9c9e 100644 --- a/js/src/jsatominlines.h +++ b/js/src/jsatominlines.h @@ -49,6 +49,13 @@ AtomToId(JSAtom* atom) inline bool ValueToIdPure(const Value& v, jsid* id) { + if (v.isString()) { + if (v.toString()->isAtom()) { + *id = AtomToId(&v.toString()->asAtom()); + return true; + } + return false; + } int32_t i; if (ValueFitsInInt32(v, &i) && INT_FITS_IN_JSID(i)) { *id = INT_TO_JSID(i); @@ -60,11 +67,7 @@ ValueToIdPure(const Value& v, jsid* id) return true; } - if (!v.isString() || !v.toString()->isAtom()) - return false; - - *id = AtomToId(&v.toString()->asAtom()); - return true; + return false; } template @@ -72,15 +75,22 @@ inline bool ValueToId(ExclusiveContext* cx, typename MaybeRooted::HandleType v, typename MaybeRooted::MutableHandleType idp) { - int32_t i; - if (ValueFitsInInt32(v, &i) && INT_FITS_IN_JSID(i)) { - idp.set(INT_TO_JSID(i)); - return true; - } + if (v.isString()) { + if (v.toString()->isAtom()) { + idp.set(AtomToId(&v.toString()->asAtom())); + return true; + } + } else { + int32_t i; + if (ValueFitsInInt32(v, &i) && INT_FITS_IN_JSID(i)) { + idp.set(INT_TO_JSID(i)); + return true; + } - if (js::IsSymbolOrSymbolWrapper(v)) { - idp.set(SYMBOL_TO_JSID(js::ToSymbolPrimitive(v))); - return true; + if (js::IsSymbolOrSymbolWrapper(v)) { + idp.set(SYMBOL_TO_JSID(js::ToSymbolPrimitive(v))); + return true; + } } JSAtom* atom = ToAtom(cx, v);