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

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

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

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

@ -2812,8 +2812,8 @@ ReportBadXMLName(JSContext *cx, const Value &idval)
js_ReportValueError(cx, JSMSG_BAD_XML_NAME, JSDVG_IGNORE_STACK, idval, NULL);
}
static JSBool
IsFunctionQName(JSContext *cx, JSObject *qn, jsid *funidp)
static bool
GetLocalNameFromFunctionQName(JSObject *qn, jsid *funidp, JSContext *cx)
{
JSAtom *atom = cx->runtime->atomState.functionNamespaceURIAtom;
JSLinearString *uri = qn->getNameURI();
@ -2821,17 +2821,15 @@ IsFunctionQName(JSContext *cx, JSObject *qn, jsid *funidp)
*funidp = ATOM_TO_JSID(qn->getQNameLocalName());
return true;
}
*funidp = JSID_VOID;
return true;
return false;
}
JSBool
js_IsFunctionQName(JSContext *cx, JSObject *obj, jsid *funidp)
bool
js_GetLocalNameFromFunctionQName(JSObject *obj, jsid *funidp, JSContext *cx)
{
if (obj->getClass() == &js_QNameClass)
return IsFunctionQName(cx, obj, funidp);
*funidp = JSID_VOID;
return JS_TRUE;
if (!obj->isQName())
return false;
return GetLocalNameFromFunctionQName(obj, funidp, cx);
}
static JSObject *
@ -2899,8 +2897,8 @@ construct:
return NULL;
out:
if (!IsFunctionQName(cx, obj, funidp))
return NULL;
if (!GetLocalNameFromFunctionQName(obj, funidp, cx))
*funidp = JSID_VOID;
return obj;
bad:
@ -4979,14 +4977,8 @@ js_GetXMLMethod(JSContext *cx, JSObject *obj, jsid id, Value *vp)
{
JS_ASSERT(obj->isXML());
if (JSID_IS_OBJECT(id)) {
jsid funid;
if (!js_IsFunctionQName(cx, JSID_TO_OBJECT(id), &funid))
return JS_FALSE;
if (!JSID_IS_VOID(funid))
id = funid;
}
if (JSID_IS_OBJECT(id))
js_GetLocalNameFromFunctionQName(JSID_TO_OBJECT(id), &id, cx);
/*
* 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;
if (!IsFunctionQName(cx, qn, &funid))
return JS_FALSE;
if (!GetLocalNameFromFunctionQName(qn, &funid, cx))
funid = JSID_VOID;
obj = &js_GetTopStackFrame(cx)->scopeChain();
do {

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

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