Backed out changeset 972c44aa9d1f (bug 452598).
This commit is contained in:
@@ -1261,10 +1261,9 @@ static const char xml_namespace_str[] = "http://www.w3.org/XML/1998/namespace";
|
||||
static const char xmlns_namespace_str[] = "http://www.w3.org/2000/xmlns/";
|
||||
|
||||
static JSObject *
|
||||
ParseNodeToQName(JSCompiler *jsc, JSParseNode *pn,
|
||||
ParseNodeToQName(JSContext *cx, JSParseContext *pc, JSParseNode *pn,
|
||||
JSXMLArray *inScopeNSes, JSBool isAttributeName)
|
||||
{
|
||||
JSContext *cx = jsc->context;
|
||||
JSString *str, *uri, *prefix, *localName;
|
||||
size_t length, offset;
|
||||
const jschar *start, *limit, *colon;
|
||||
@@ -1314,15 +1313,15 @@ ParseNodeToQName(JSCompiler *jsc, JSParseNode *pn,
|
||||
}
|
||||
|
||||
if (!uri) {
|
||||
js_ReportCompileErrorNumber(jsc->context, &jsc->tokenStream, pn,
|
||||
js_ReportCompileErrorNumber(cx, &pc->tokenStream, pn,
|
||||
JSREPORT_ERROR,
|
||||
JSMSG_BAD_XML_NAMESPACE,
|
||||
js_ValueToPrintableString(jsc->context,
|
||||
js_ValueToPrintableString(cx,
|
||||
STRING_TO_JSVAL(prefix)));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
localName = js_NewStringCopyN(jsc->context, colon + 1, length - (offset + 1));
|
||||
localName = js_NewStringCopyN(cx, colon + 1, length - (offset + 1));
|
||||
if (!localName)
|
||||
return NULL;
|
||||
} else {
|
||||
@@ -1347,12 +1346,12 @@ ParseNodeToQName(JSCompiler *jsc, JSParseNode *pn,
|
||||
break;
|
||||
}
|
||||
}
|
||||
prefix = IS_EMPTY(uri) ? jsc->context->runtime->emptyString : NULL;
|
||||
prefix = IS_EMPTY(uri) ? cx->runtime->emptyString : NULL;
|
||||
}
|
||||
localName = str;
|
||||
}
|
||||
|
||||
return NewXMLQName(jsc->context, uri, prefix, localName);
|
||||
return NewXMLQName(cx, uri, prefix, localName);
|
||||
}
|
||||
|
||||
static JSString *
|
||||
@@ -1382,10 +1381,9 @@ ChompXMLWhitespace(JSContext *cx, JSString *str)
|
||||
}
|
||||
|
||||
static JSXML *
|
||||
ParseNodeToXML(JSCompiler *jsc, JSParseNode *pn,
|
||||
ParseNodeToXML(JSContext *cx, JSParseContext *pc, JSParseNode *pn,
|
||||
JSXMLArray *inScopeNSes, uintN flags)
|
||||
{
|
||||
JSContext *cx = jsc->context;
|
||||
JSXML *xml, *kid, *attr, *attrj;
|
||||
JSString *str;
|
||||
uint32 length, n, i, j;
|
||||
@@ -1396,7 +1394,7 @@ ParseNodeToXML(JSCompiler *jsc, JSParseNode *pn,
|
||||
int stackDummy;
|
||||
|
||||
if (!JS_CHECK_STACK_SIZE(cx, stackDummy)) {
|
||||
js_ReportCompileErrorNumber(cx, &jsc->tokenStream, pn, JSREPORT_ERROR,
|
||||
js_ReportCompileErrorNumber(cx, &pc->tokenStream, pn, JSREPORT_ERROR,
|
||||
JSMSG_OVER_RECURSED);
|
||||
return NULL;
|
||||
}
|
||||
@@ -1415,7 +1413,7 @@ ParseNodeToXML(JSCompiler *jsc, JSParseNode *pn,
|
||||
case TOK_XMLELEM:
|
||||
length = inScopeNSes->length;
|
||||
pn2 = pn->pn_head;
|
||||
xml = ParseNodeToXML(jsc, pn2, inScopeNSes, flags);
|
||||
xml = ParseNodeToXML(cx, pc, pn2, inScopeNSes, flags);
|
||||
if (!xml)
|
||||
goto fail;
|
||||
|
||||
@@ -1440,7 +1438,7 @@ ParseNodeToXML(JSCompiler *jsc, JSParseNode *pn,
|
||||
continue;
|
||||
}
|
||||
|
||||
kid = ParseNodeToXML(jsc, pn2, inScopeNSes, flags);
|
||||
kid = ParseNodeToXML(cx, pc, pn2, inScopeNSes, flags);
|
||||
if (kid == PN2X_SKIP_CHILD) {
|
||||
--n;
|
||||
continue;
|
||||
@@ -1491,7 +1489,7 @@ ParseNodeToXML(JSCompiler *jsc, JSParseNode *pn,
|
||||
continue;
|
||||
}
|
||||
|
||||
kid = ParseNodeToXML(jsc, pn2, inScopeNSes, flags);
|
||||
kid = ParseNodeToXML(cx, pc, pn2, inScopeNSes, flags);
|
||||
if (kid == PN2X_SKIP_CHILD) {
|
||||
--n;
|
||||
continue;
|
||||
@@ -1535,7 +1533,7 @@ ParseNodeToXML(JSCompiler *jsc, JSParseNode *pn,
|
||||
/* Enforce "Well-formedness constraint: Unique Att Spec". */
|
||||
for (pn3 = head; pn3 != pn2; pn3 = pn3->pn_next->pn_next) {
|
||||
if (pn3->pn_atom == pn2->pn_atom) {
|
||||
js_ReportCompileErrorNumber(cx, &jsc->tokenStream, pn2,
|
||||
js_ReportCompileErrorNumber(cx, &pc->tokenStream, pn2,
|
||||
JSREPORT_ERROR,
|
||||
JSMSG_DUPLICATE_XML_ATTR,
|
||||
js_ValueToPrintableString(cx,
|
||||
@@ -1620,7 +1618,7 @@ ParseNodeToXML(JSCompiler *jsc, JSParseNode *pn,
|
||||
|
||||
/* Second pass: process tag name and attributes, using namespaces. */
|
||||
pn2 = pn->pn_head;
|
||||
qn = ParseNodeToQName(jsc, pn2, inScopeNSes, JS_FALSE);
|
||||
qn = ParseNodeToQName(cx, pc, pn2, inScopeNSes, JS_FALSE);
|
||||
if (!qn)
|
||||
goto fail;
|
||||
xml->name = qn;
|
||||
@@ -1631,7 +1629,7 @@ ParseNodeToXML(JSCompiler *jsc, JSParseNode *pn,
|
||||
goto fail;
|
||||
|
||||
for (i = 0; (pn2 = pn2->pn_next) != NULL; i++) {
|
||||
qn = ParseNodeToQName(jsc, pn2, inScopeNSes, JS_TRUE);
|
||||
qn = ParseNodeToQName(cx, pc, pn2, inScopeNSes, JS_TRUE);
|
||||
if (!qn) {
|
||||
xml->xml_attrs.length = i;
|
||||
goto fail;
|
||||
@@ -1646,7 +1644,7 @@ ParseNodeToXML(JSCompiler *jsc, JSParseNode *pn,
|
||||
attrjqn = attrj->name;
|
||||
if (js_EqualStrings(GetURI(attrjqn), GetURI(qn)) &&
|
||||
js_EqualStrings(GetLocalName(attrjqn), GetLocalName(qn))) {
|
||||
js_ReportCompileErrorNumber(cx, &jsc->tokenStream, pn2,
|
||||
js_ReportCompileErrorNumber(cx, &pc->tokenStream, pn2,
|
||||
JSREPORT_ERROR,
|
||||
JSMSG_DUPLICATE_XML_ATTR,
|
||||
js_ValueToPrintableString(cx,
|
||||
@@ -1687,7 +1685,7 @@ ParseNodeToXML(JSCompiler *jsc, JSParseNode *pn,
|
||||
xml_class = JSXML_CLASS_COMMENT;
|
||||
} else if (pn->pn_type == TOK_XMLPI) {
|
||||
if (IS_XML(str)) {
|
||||
js_ReportCompileErrorNumber(cx, &jsc->tokenStream, pn,
|
||||
js_ReportCompileErrorNumber(cx, &pc->tokenStream, pn,
|
||||
JSREPORT_ERROR,
|
||||
JSMSG_RESERVED_ID,
|
||||
js_ValueToPrintableString(cx,
|
||||
@@ -1698,7 +1696,7 @@ ParseNodeToXML(JSCompiler *jsc, JSParseNode *pn,
|
||||
if (flags & XSF_IGNORE_PROCESSING_INSTRUCTIONS)
|
||||
goto skip_child;
|
||||
|
||||
qn = ParseNodeToQName(jsc, pn, inScopeNSes, JS_FALSE);
|
||||
qn = ParseNodeToQName(cx, pc, pn, inScopeNSes, JS_FALSE);
|
||||
if (!qn)
|
||||
goto fail;
|
||||
|
||||
@@ -1736,7 +1734,7 @@ skip_child:
|
||||
#undef PN2X_SKIP_CHILD
|
||||
|
||||
syntax:
|
||||
js_ReportCompileErrorNumber(cx, &jsc->tokenStream, pn, JSREPORT_ERROR,
|
||||
js_ReportCompileErrorNumber(cx, &pc->tokenStream, pn, JSREPORT_ERROR,
|
||||
JSMSG_BAD_XML_MARKUP);
|
||||
fail:
|
||||
js_LeaveLocalRootScope(cx);
|
||||
@@ -1830,6 +1828,7 @@ ParseXMLSource(JSContext *cx, JSString *src)
|
||||
jschar *chars;
|
||||
const jschar *srcp, *endp;
|
||||
JSXML *xml;
|
||||
JSParseContext pc;
|
||||
const char *filename;
|
||||
uintN lineno;
|
||||
JSStackFrame *fp;
|
||||
@@ -1892,19 +1891,20 @@ ParseXMLSource(JSContext *cx, JSString *src)
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
JSCompiler jsc(cx);
|
||||
if (jsc.init(chars, length, NULL, filename, lineno)) {
|
||||
pn = jsc.parseXMLText(js_GetTopStackFrame(cx)->scopeChain, false);
|
||||
if (pn && XMLArrayInit(cx, &nsarray, 1)) {
|
||||
if (GetXMLSettingFlags(cx, &flags))
|
||||
xml = ParseNodeToXML(&jsc, pn, &nsarray, flags);
|
||||
if (!js_InitParseContext(cx, &pc, NULL, NULL, chars, length, NULL,
|
||||
filename, lineno))
|
||||
goto out;
|
||||
pn = js_ParseXMLText(cx, js_GetTopStackFrame(cx)->scopeChain, &pc,
|
||||
JS_FALSE);
|
||||
if (pn && XMLArrayInit(cx, &nsarray, 1)) {
|
||||
if (GetXMLSettingFlags(cx, &flags))
|
||||
xml = ParseNodeToXML(cx, &pc, pn, &nsarray, flags);
|
||||
|
||||
XMLArrayFinish(cx, &nsarray);
|
||||
}
|
||||
}
|
||||
XMLArrayFinish(cx, &nsarray);
|
||||
}
|
||||
js_FinishParseContext(cx, &pc);
|
||||
|
||||
out:
|
||||
JS_free(cx, chars);
|
||||
return xml;
|
||||
|
||||
@@ -7433,24 +7433,24 @@ js_FinalizeXML(JSContext *cx, JSXML *xml)
|
||||
}
|
||||
|
||||
JSObject *
|
||||
js_ParseNodeToXMLObject(JSCompiler *jsc, JSParseNode *pn)
|
||||
js_ParseNodeToXMLObject(JSContext *cx, JSParseContext *pc, JSParseNode *pn)
|
||||
{
|
||||
jsval nsval;
|
||||
JSObject *ns;
|
||||
JSXMLArray nsarray;
|
||||
JSXML *xml;
|
||||
|
||||
if (!js_GetDefaultXMLNamespace(jsc->context, &nsval))
|
||||
if (!js_GetDefaultXMLNamespace(cx, &nsval))
|
||||
return NULL;
|
||||
JS_ASSERT(!JSVAL_IS_PRIMITIVE(nsval));
|
||||
ns = JSVAL_TO_OBJECT(nsval);
|
||||
|
||||
if (!XMLArrayInit(jsc->context, &nsarray, 1))
|
||||
if (!XMLArrayInit(cx, &nsarray, 1))
|
||||
return NULL;
|
||||
|
||||
XMLARRAY_APPEND(jsc->context, &nsarray, ns);
|
||||
xml = ParseNodeToXML(jsc, pn, &nsarray, XSF_PRECOMPILED_ROOT);
|
||||
XMLArrayFinish(jsc->context, &nsarray);
|
||||
XMLARRAY_APPEND(cx, &nsarray, ns);
|
||||
xml = ParseNodeToXML(cx, pc, pn, &nsarray, XSF_PRECOMPILED_ROOT);
|
||||
XMLArrayFinish(cx, &nsarray);
|
||||
if (!xml)
|
||||
return NULL;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user