Bug 678998 - Rename IsFunctionQName to GetLocalNameFromFunctionQName and make it infallible, now that QName's localName slot stores an atom and conversion to jsid can be infallible. r=luke

--HG--
extra : rebase_source : 5f0958ab3053b07ca87eb5955b274e3bd551d23d
This commit is contained in:
Jeff Walden 2011-08-15 00:12:48 -04:00
Родитель 1b36104399
Коммит e5483b3b1e
4 изменённых файлов: 21 добавлений и 35 удалений

Просмотреть файл

@ -774,9 +774,7 @@ js_InternNonIntElementIdSlow(JSContext *cx, JSObject *obj, const Value &idval,
return true; return true;
} }
if (!js_IsFunctionQName(cx, &idval.toObject(), idp)) if (js_GetLocalNameFromFunctionQName(&idval.toObject(), idp, cx))
return JS_FALSE;
if (!JSID_IS_VOID(*idp))
return true; return true;
return js_ValueToStringId(cx, idval, idp); return js_ValueToStringId(cx, idval, idp);
@ -794,9 +792,7 @@ js_InternNonIntElementIdSlow(JSContext *cx, JSObject *obj, const Value &idval,
return true; return true;
} }
if (!js_IsFunctionQName(cx, &idval.toObject(), idp)) if (js_GetLocalNameFromFunctionQName(&idval.toObject(), idp, cx)) {
return JS_FALSE;
if (!JSID_IS_VOID(*idp)) {
*vp = IdToValue(*idp); *vp = IdToValue(*idp);
return true; return true;
} }

Просмотреть файл

@ -538,9 +538,7 @@ js_OnUnknownMethod(JSContext *cx, Value *vp)
/* Extract the function name from function::name qname. */ /* Extract the function name from function::name qname. */
if (vp[0].isObject()) { if (vp[0].isObject()) {
obj = &vp[0].toObject(); obj = &vp[0].toObject();
if (!js_IsFunctionQName(cx, obj, &id)) if (js_GetLocalNameFromFunctionQName(obj, &id, cx))
return false;
if (!JSID_IS_VOID(id))
vp[0] = IdToValue(id); vp[0] = IdToValue(id);
} }
#endif #endif

Просмотреть файл

@ -2812,8 +2812,8 @@ ReportBadXMLName(JSContext *cx, const Value &idval)
js_ReportValueError(cx, JSMSG_BAD_XML_NAME, JSDVG_IGNORE_STACK, idval, NULL); js_ReportValueError(cx, JSMSG_BAD_XML_NAME, JSDVG_IGNORE_STACK, idval, NULL);
} }
static JSBool static bool
IsFunctionQName(JSContext *cx, JSObject *qn, jsid *funidp) GetLocalNameFromFunctionQName(JSObject *qn, jsid *funidp, JSContext *cx)
{ {
JSAtom *atom = cx->runtime->atomState.functionNamespaceURIAtom; JSAtom *atom = cx->runtime->atomState.functionNamespaceURIAtom;
JSLinearString *uri = qn->getNameURI(); JSLinearString *uri = qn->getNameURI();
@ -2821,17 +2821,15 @@ IsFunctionQName(JSContext *cx, JSObject *qn, jsid *funidp)
*funidp = ATOM_TO_JSID(qn->getQNameLocalName()); *funidp = ATOM_TO_JSID(qn->getQNameLocalName());
return true; return true;
} }
*funidp = JSID_VOID; return false;
return true;
} }
JSBool bool
js_IsFunctionQName(JSContext *cx, JSObject *obj, jsid *funidp) js_GetLocalNameFromFunctionQName(JSObject *obj, jsid *funidp, JSContext *cx)
{ {
if (obj->getClass() == &js_QNameClass) if (!obj->isQName())
return IsFunctionQName(cx, obj, funidp); return false;
*funidp = JSID_VOID; return GetLocalNameFromFunctionQName(obj, funidp, cx);
return JS_TRUE;
} }
static JSObject * static JSObject *
@ -2899,8 +2897,8 @@ construct:
return NULL; return NULL;
out: out:
if (!IsFunctionQName(cx, obj, funidp)) if (!GetLocalNameFromFunctionQName(obj, funidp, cx))
return NULL; *funidp = JSID_VOID;
return obj; return obj;
bad: bad:
@ -4979,14 +4977,8 @@ js_GetXMLMethod(JSContext *cx, JSObject *obj, jsid id, Value *vp)
{ {
JS_ASSERT(obj->isXML()); JS_ASSERT(obj->isXML());
if (JSID_IS_OBJECT(id)) { if (JSID_IS_OBJECT(id))
jsid funid; js_GetLocalNameFromFunctionQName(JSID_TO_OBJECT(id), &id, cx);
if (!js_IsFunctionQName(cx, JSID_TO_OBJECT(id), &funid))
return JS_FALSE;
if (!JSID_IS_VOID(funid))
id = funid;
}
/* /*
* As our callers have a bad habit of passing a pointer to an unrooted * As our callers have a bad habit of passing a pointer to an unrooted
@ -7447,8 +7439,8 @@ js_FindXMLProperty(JSContext *cx, const Value &nameval, JSObject **objp, jsid *i
} }
qn = nameobj; qn = nameobj;
if (!IsFunctionQName(cx, qn, &funid)) if (!GetLocalNameFromFunctionQName(qn, &funid, cx))
return JS_FALSE; funid = JSID_VOID;
obj = &js_GetTopStackFrame(cx)->scopeChain(); obj = &js_GetTopStackFrame(cx)->scopeChain();
do { do {

Просмотреть файл

@ -280,11 +280,11 @@ extern JSObject *
js_InitXMLClasses(JSContext *cx, JSObject *obj); js_InitXMLClasses(JSContext *cx, JSObject *obj);
/* /*
* If obj is QName corresponding to function::name, set *funidp to name's id, * If obj is a QName corresponding to function::name, set *funidp to name's id
* otherwise set *funidp to void. * and return true, else return false.
*/ */
JSBool extern bool
js_IsFunctionQName(JSContext *cx, JSObject *obj, jsid *funidp); js_GetLocalNameFromFunctionQName(JSObject *obj, jsid *funidp, JSContext *cx);
extern JSBool extern JSBool
js_GetDefaultXMLNamespace(JSContext *cx, jsval *vp); js_GetDefaultXMLNamespace(JSContext *cx, jsval *vp);