Allow for nested filtering expressions in flag-setting and restoring (352605, r=jwalden).

This commit is contained in:
brendan%mozilla.org 2006-09-14 04:44:29 +00:00
Родитель 5f0d68e853
Коммит b7df3a74ce
1 изменённых файлов: 4 добавлений и 3 удалений

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

@ -7962,9 +7962,9 @@ js_FilterXMLList(JSContext *cx, JSObject *obj, jsbytecode *pc, jsval *vp)
{ {
JSBool ok, match; JSBool ok, match;
JSStackFrame *fp; JSStackFrame *fp;
uint32 flags, i, n;
JSObject *scobj, *listobj, *resobj, *withobj, *kidobj; JSObject *scobj, *listobj, *resobj, *withobj, *kidobj;
JSXML *xml, *list, *result, *kid; JSXML *xml, *list, *result, *kid;
uint32 i, n;
ok = js_EnterLocalRootScope(cx); ok = js_EnterLocalRootScope(cx);
if (!ok) if (!ok)
@ -7973,7 +7973,8 @@ js_FilterXMLList(JSContext *cx, JSObject *obj, jsbytecode *pc, jsval *vp)
/* All control flow after this point must exit via label out or bad. */ /* All control flow after this point must exit via label out or bad. */
*vp = JSVAL_NULL; *vp = JSVAL_NULL;
fp = cx->fp; fp = cx->fp;
fp->flags |= JSFRAME_FILTERING; flags = fp->flags;
fp->flags = flags | JSFRAME_FILTERING;
scobj = js_GetScopeChain(cx, fp); scobj = js_GetScopeChain(cx, fp);
withobj = NULL; withobj = NULL;
if (!scobj) if (!scobj)
@ -8024,7 +8025,7 @@ js_FilterXMLList(JSContext *cx, JSObject *obj, jsbytecode *pc, jsval *vp)
*vp = OBJECT_TO_JSVAL(resobj); *vp = OBJECT_TO_JSVAL(resobj);
out: out:
fp->flags &= ~JSFRAME_FILTERING; fp->flags = flags;
if (withobj) { if (withobj) {
fp->scopeChain = scobj; fp->scopeChain = scobj;
JS_SetPrivate(cx, withobj, NULL); JS_SetPrivate(cx, withobj, NULL);