Actually fill the setting cache when we get boolean properties. bug 324688, r=brendan

This commit is contained in:
mrbkap%gmail.com 2006-02-01 00:25:50 +00:00
parent cc7c8dd917
commit ca26119a70

View File

@ -1262,6 +1262,12 @@ enum xml_static_tinyid {
XML_PRETTY_INDENT
};
static JSBool
xml_setting_getter(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
{
return JS_TRUE;
}
static JSBool
xml_setting_setter(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
{
@ -1282,16 +1288,16 @@ xml_setting_setter(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
static JSPropertySpec xml_static_props[] = {
{js_ignoreComments_str, XML_IGNORE_COMMENTS, JSPROP_PERMANENT,
NULL, xml_setting_setter},
xml_setting_getter, xml_setting_setter},
{js_ignoreProcessingInstructions_str,
XML_IGNORE_PROCESSING_INSTRUCTIONS, JSPROP_PERMANENT,
NULL, xml_setting_setter},
xml_setting_getter, xml_setting_setter},
{js_ignoreWhitespace_str, XML_IGNORE_WHITESPACE, JSPROP_PERMANENT,
NULL, xml_setting_setter},
xml_setting_getter, xml_setting_setter},
{js_prettyPrinting_str, XML_PRETTY_PRINTING, JSPROP_PERMANENT,
NULL, xml_setting_setter},
xml_setting_getter, xml_setting_setter},
{js_prettyIndent_str, XML_PRETTY_INDENT, JSPROP_PERMANENT,
NULL, NULL},
xml_setting_getter, NULL},
{0,0,0,0,0}
};
@ -1828,24 +1834,45 @@ GetXMLSetting(JSContext *cx, const char *name, jsval *vp)
return JS_GetProperty(cx, JSVAL_TO_OBJECT(v), name, vp);
}
static JSBool
FillSettingsCache(JSContext *cx)
{
int i;
const char *name;
jsval v;
JSBool isSet;
/* Note: XML_PRETTY_INDENT is not a boolean setting. */
for (i = XML_IGNORE_COMMENTS; i < XML_PRETTY_INDENT; i++) {
name = xml_static_props[i].name;
if (!GetXMLSetting(cx, name, &v) || !js_ValueToBoolean(cx, v, &isSet))
return JS_FALSE;
if (isSet)
cx->xmlSettingFlags |= JS_BIT(i);
else
cx->xmlSettingFlags &= ~JS_BIT(i);
}
cx->xmlSettingFlags |= XSF_CACHE_VALID;
return JS_TRUE;
}
static JSBool
GetBooleanXMLSetting(JSContext *cx, const char *name, JSBool *bp)
{
int i;
jsval v;
if (cx->xmlSettingFlags & XSF_CACHE_VALID) {
for (i = 0; xml_static_props[i].name; i++) {
if (!strcmp(xml_static_props[i].name, name)) {
*bp = (cx->xmlSettingFlags & JS_BIT(i)) != 0;
return JS_TRUE;
}
if (!(cx->xmlSettingFlags & XSF_CACHE_VALID) && !FillSettingsCache(cx))
return JS_FALSE;
for (i = 0; xml_static_props[i].name; i++) {
if (!strcmp(xml_static_props[i].name, name)) {
*bp = (cx->xmlSettingFlags & JS_BIT(i)) != 0;
return JS_TRUE;
}
*bp = JS_FALSE;
return JS_TRUE;
}
return GetXMLSetting(cx, name, &v) && js_ValueToBoolean(cx, v, bp);
*bp = JS_FALSE;
return JS_TRUE;
}
static JSBool