Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1365)

Unified Diff: third_party/libxslt/libxslt/transform.c

Issue 1848793005: Roll libxslt to 891681e3e948f31732229f53cb6db7215f740fc7 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/libxslt/libxslt/preproc.c ('k') | third_party/libxslt/libxslt/variables.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/libxslt/libxslt/transform.c
diff --git a/third_party/libxslt/libxslt/transform.c b/third_party/libxslt/libxslt/transform.c
index 35701deabb6eb3546461223687521b5f1b928be7..8b86e2ebc0d96c81bea6a35ee113c023c0717759 100644
--- a/third_party/libxslt/libxslt/transform.c
+++ b/third_party/libxslt/libxslt/transform.c
@@ -338,6 +338,104 @@ profCallgraphAdd(xsltTemplatePtr templ, xsltTemplatePtr parent)
}
}
+/**
+ * xsltPreCompEval:
+ * @ctxt: transform context
+ * @node: context node
+ * @comp: precompiled expression
+ *
+ * Evaluate a precompiled XPath expression.
+ */
+static xmlXPathObjectPtr
+xsltPreCompEval(xsltTransformContextPtr ctxt, xmlNodePtr node,
+ xsltStylePreCompPtr comp) {
+ xmlXPathObjectPtr res;
+ xmlXPathContextPtr xpctxt;
+ xmlNodePtr oldXPContextNode;
+ xmlNsPtr *oldXPNamespaces;
+ int oldXPProximityPosition, oldXPContextSize, oldXPNsNr;
+
+ xpctxt = ctxt->xpathCtxt;
+ oldXPContextNode = xpctxt->node;
+ oldXPProximityPosition = xpctxt->proximityPosition;
+ oldXPContextSize = xpctxt->contextSize;
+ oldXPNsNr = xpctxt->nsNr;
+ oldXPNamespaces = xpctxt->namespaces;
+
+ xpctxt->node = node;
+#ifdef XSLT_REFACTORED
+ if (comp->inScopeNs != NULL) {
+ xpctxt->namespaces = comp->inScopeNs->list;
+ xpctxt->nsNr = comp->inScopeNs->xpathNumber;
+ } else {
+ xpctxt->namespaces = NULL;
+ xpctxt->nsNr = 0;
+ }
+#else
+ xpctxt->namespaces = comp->nsList;
+ xpctxt->nsNr = comp->nsNr;
+#endif
+
+ res = xmlXPathCompiledEval(comp->comp, xpctxt);
+
+ xpctxt->node = oldXPContextNode;
+ xpctxt->proximityPosition = oldXPProximityPosition;
+ xpctxt->contextSize = oldXPContextSize;
+ xpctxt->nsNr = oldXPNsNr;
+ xpctxt->namespaces = oldXPNamespaces;
+
+ return(res);
+}
+
+/**
+ * xsltPreCompEvalToBoolean:
+ * @ctxt: transform context
+ * @node: context node
+ * @comp: precompiled expression
+ *
+ * Evaluate a precompiled XPath expression as boolean.
+ */
+static int
+xsltPreCompEvalToBoolean(xsltTransformContextPtr ctxt, xmlNodePtr node,
+ xsltStylePreCompPtr comp) {
+ int res;
+ xmlXPathContextPtr xpctxt;
+ xmlNodePtr oldXPContextNode;
+ xmlNsPtr *oldXPNamespaces;
+ int oldXPProximityPosition, oldXPContextSize, oldXPNsNr;
+
+ xpctxt = ctxt->xpathCtxt;
+ oldXPContextNode = xpctxt->node;
+ oldXPProximityPosition = xpctxt->proximityPosition;
+ oldXPContextSize = xpctxt->contextSize;
+ oldXPNsNr = xpctxt->nsNr;
+ oldXPNamespaces = xpctxt->namespaces;
+
+ xpctxt->node = node;
+#ifdef XSLT_REFACTORED
+ if (comp->inScopeNs != NULL) {
+ xpctxt->namespaces = comp->inScopeNs->list;
+ xpctxt->nsNr = comp->inScopeNs->xpathNumber;
+ } else {
+ xpctxt->namespaces = NULL;
+ xpctxt->nsNr = 0;
+ }
+#else
+ xpctxt->namespaces = comp->nsList;
+ xpctxt->nsNr = comp->nsNr;
+#endif
+
+ res = xmlXPathCompiledEvalToBoolean(comp->comp, xpctxt);
+
+ xpctxt->node = oldXPContextNode;
+ xpctxt->proximityPosition = oldXPProximityPosition;
+ xpctxt->contextSize = oldXPContextSize;
+ xpctxt->nsNr = oldXPNsNr;
+ xpctxt->namespaces = oldXPNamespaces;
+
+ return(res);
+}
+
/************************************************************************
* *
* XInclude default settings *
@@ -831,9 +929,9 @@ xsltCopyTextString(xsltTransformContextPtr ctxt, xmlNodePtr target,
}
copy = xmlNewTextLen(string, len);
}
+ if (copy != NULL && target != NULL)
+ copy = xsltAddChild(target, copy);
if (copy != NULL) {
- if (target != NULL)
- copy = xsltAddChild(target, copy);
ctxt->lasttext = copy->content;
ctxt->lasttsize = len;
ctxt->lasttuse = len;
@@ -1222,6 +1320,11 @@ xsltShallowCopyElem(xsltTransformContextPtr ctxt, xmlNodePtr node,
if (copy != NULL) {
copy->doc = ctxt->output;
copy = xsltAddChild(insert, copy);
+ if (copy == NULL) {
+ xsltTransformError(ctxt, NULL, node,
+ "xsltShallowCopyElem: copy failed\n");
+ return (copy);
+ }
if (node->type == XML_ELEMENT_NODE) {
/*
@@ -1555,6 +1658,11 @@ xsltCopyTreeInternal(xsltTransformContextPtr ctxt,
if (copy != NULL) {
copy->doc = ctxt->output;
copy = xsltAddChild(insert, copy);
+ if (copy == NULL) {
+ xsltTransformError(ctxt, NULL, invocNode,
+ "xsltCopyTreeInternal: Copying of '%s' failed.\n", node->name);
+ return (copy);
+ }
/*
* The node may have been coalesced into another text node.
*/
@@ -3606,8 +3714,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node,
xmlDictReference(res->dict);
} else if (xmlStrEqual(method, (const xmlChar *) "xhtml")) {
xsltTransformError(ctxt, NULL, inst,
- "xsltDocumentElem: unsupported method xhtml\n",
- style->method);
+ "xsltDocumentElem: unsupported method xhtml\n");
ctxt->type = XSLT_OUTPUT_HTML;
res = htmlNewDocNoDtD(doctypeSystem, doctypePublic);
if (res == NULL)
@@ -3627,8 +3734,8 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node,
#endif
} else {
xsltTransformError(ctxt, NULL, inst,
- "xsltDocumentElem: unsupported method %s\n",
- style->method);
+ "xsltDocumentElem: unsupported method (%s)\n",
+ method);
goto error;
}
} else {
@@ -4034,6 +4141,11 @@ xsltElement(xsltTransformContextPtr ctxt, xmlNodePtr node,
return;
}
copy = xsltAddChild(ctxt->insert, copy);
+ if (copy == NULL) {
+ xsltTransformError(ctxt, NULL, inst,
+ "xsl:element : xsltAddChild failed\n");
+ return;
+ }
/*
* Namespace
@@ -4287,11 +4399,6 @@ xsltCopyOf(xsltTransformContextPtr ctxt, xmlNodePtr node,
xmlXPathObjectPtr res = NULL;
xmlNodeSetPtr list = NULL;
int i;
- xmlDocPtr oldXPContextDoc;
- xmlNsPtr *oldXPNamespaces;
- xmlNodePtr oldXPContextNode;
- int oldXPProximityPosition, oldXPContextSize, oldXPNsNr;
- xmlXPathContextPtr xpctxt;
if ((ctxt == NULL) || (node == NULL) || (inst == NULL))
return;
@@ -4327,42 +4434,7 @@ xsltCopyOf(xsltTransformContextPtr ctxt, xmlNodePtr node,
/*
* Evaluate the "select" expression.
*/
- xpctxt = ctxt->xpathCtxt;
- oldXPContextDoc = xpctxt->doc;
- oldXPContextNode = xpctxt->node;
- oldXPProximityPosition = xpctxt->proximityPosition;
- oldXPContextSize = xpctxt->contextSize;
- oldXPNsNr = xpctxt->nsNr;
- oldXPNamespaces = xpctxt->namespaces;
-
- xpctxt->node = node;
- if (comp != NULL) {
-
-#ifdef XSLT_REFACTORED
- if (comp->inScopeNs != NULL) {
- xpctxt->namespaces = comp->inScopeNs->list;
- xpctxt->nsNr = comp->inScopeNs->xpathNumber;
- } else {
- xpctxt->namespaces = NULL;
- xpctxt->nsNr = 0;
- }
-#else
- xpctxt->namespaces = comp->nsList;
- xpctxt->nsNr = comp->nsNr;
-#endif
- } else {
- xpctxt->namespaces = NULL;
- xpctxt->nsNr = 0;
- }
-
- res = xmlXPathCompiledEval(comp->comp, xpctxt);
-
- xpctxt->doc = oldXPContextDoc;
- xpctxt->node = oldXPContextNode;
- xpctxt->contextSize = oldXPContextSize;
- xpctxt->proximityPosition = oldXPProximityPosition;
- xpctxt->nsNr = oldXPNsNr;
- xpctxt->namespaces = oldXPNamespaces;
+ res = xsltPreCompEval(ctxt, node, comp);
if (res != NULL) {
if (res->type == XPATH_NODESET) {
@@ -4472,11 +4544,6 @@ xsltValueOf(xsltTransformContextPtr ctxt, xmlNodePtr node,
#endif
xmlXPathObjectPtr res = NULL;
xmlChar *value = NULL;
- xmlDocPtr oldXPContextDoc;
- xmlNsPtr *oldXPNamespaces;
- xmlNodePtr oldXPContextNode;
- int oldXPProximityPosition, oldXPContextSize, oldXPNsNr;
- xmlXPathContextPtr xpctxt;
if ((ctxt == NULL) || (node == NULL) || (inst == NULL))
return;
@@ -4493,42 +4560,7 @@ xsltValueOf(xsltTransformContextPtr ctxt, xmlNodePtr node,
"xsltValueOf: select %s\n", comp->select));
#endif
- xpctxt = ctxt->xpathCtxt;
- oldXPContextDoc = xpctxt->doc;
- oldXPContextNode = xpctxt->node;
- oldXPProximityPosition = xpctxt->proximityPosition;
- oldXPContextSize = xpctxt->contextSize;
- oldXPNsNr = xpctxt->nsNr;
- oldXPNamespaces = xpctxt->namespaces;
-
- xpctxt->node = node;
- if (comp != NULL) {
-
-#ifdef XSLT_REFACTORED
- if (comp->inScopeNs != NULL) {
- xpctxt->namespaces = comp->inScopeNs->list;
- xpctxt->nsNr = comp->inScopeNs->xpathNumber;
- } else {
- xpctxt->namespaces = NULL;
- xpctxt->nsNr = 0;
- }
-#else
- xpctxt->namespaces = comp->nsList;
- xpctxt->nsNr = comp->nsNr;
-#endif
- } else {
- xpctxt->namespaces = NULL;
- xpctxt->nsNr = 0;
- }
-
- res = xmlXPathCompiledEval(comp->comp, xpctxt);
-
- xpctxt->doc = oldXPContextDoc;
- xpctxt->node = oldXPContextNode;
- xpctxt->contextSize = oldXPContextSize;
- xpctxt->proximityPosition = oldXPProximityPosition;
- xpctxt->nsNr = oldXPNsNr;
- xpctxt->namespaces = oldXPNamespaces;
+ res = xsltPreCompEval(ctxt, node, comp);
/*
* Cast the XPath object to string.
@@ -4584,6 +4616,10 @@ xsltNumber(xsltTransformContextPtr ctxt, xmlNodePtr node,
#else
xsltStylePreCompPtr comp = castedComp;
#endif
+ xmlXPathContextPtr xpctxt;
+ xmlNsPtr *oldXPNamespaces;
+ int oldXPNsNr;
+
if (comp == NULL) {
xsltTransformError(ctxt, NULL, inst,
"xsl:number : compilation failed\n");
@@ -4596,7 +4632,27 @@ xsltNumber(xsltTransformContextPtr ctxt, xmlNodePtr node,
comp->numdata.doc = inst->doc;
comp->numdata.node = inst;
+ xpctxt = ctxt->xpathCtxt;
+ oldXPNsNr = xpctxt->nsNr;
+ oldXPNamespaces = xpctxt->namespaces;
+
+#ifdef XSLT_REFACTORED
+ if (comp->inScopeNs != NULL) {
+ xpctxt->namespaces = comp->inScopeNs->list;
+ xpctxt->nsNr = comp->inScopeNs->xpathNumber;
+ } else {
+ xpctxt->namespaces = NULL;
+ xpctxt->nsNr = 0;
+ }
+#else
+ xpctxt->namespaces = comp->nsList;
+ xpctxt->nsNr = comp->nsNr;
+#endif
+
xsltNumberFormat(ctxt, &comp->numdata, node);
+
+ xpctxt->nsNr = oldXPNsNr;
+ xpctxt->namespaces = oldXPNamespaces;
}
/**
@@ -4790,12 +4846,11 @@ xsltApplyTemplates(xsltTransformContextPtr ctxt, xmlNodePtr node,
xmlNodePtr cur, delNode = NULL, oldContextNode;
xmlNodeSetPtr list = NULL, oldList;
xsltStackElemPtr withParams = NULL;
- int oldXPProximityPosition, oldXPContextSize, oldXPNsNr;
+ int oldXPProximityPosition, oldXPContextSize;
const xmlChar *oldMode, *oldModeURI;
xmlDocPtr oldXPDoc;
xsltDocumentPtr oldDocInfo;
xmlXPathContextPtr xpctxt;
- xmlNsPtr *oldXPNamespaces;
if (comp == NULL) {
xsltTransformError(ctxt, NULL, inst,
@@ -4829,8 +4884,6 @@ xsltApplyTemplates(xsltTransformContextPtr ctxt, xmlNodePtr node,
oldXPContextSize = xpctxt->contextSize;
oldXPProximityPosition = xpctxt->proximityPosition;
oldXPDoc = xpctxt->doc;
- oldXPNsNr = xpctxt->nsNr;
- oldXPNamespaces = xpctxt->namespaces;
/*
* Set up contexts.
@@ -4851,26 +4904,8 @@ xsltApplyTemplates(xsltTransformContextPtr ctxt, xmlNodePtr node,
"xsltApplyTemplates: select %s\n", comp->select));
#endif
- /*
- * Set up XPath.
- */
- xpctxt->node = node; /* Set the "context node" */
-#ifdef XSLT_REFACTORED
- if (comp->inScopeNs != NULL) {
- xpctxt->namespaces = comp->inScopeNs->list;
- xpctxt->nsNr = comp->inScopeNs->xpathNumber;
- } else {
- xpctxt->namespaces = NULL;
- xpctxt->nsNr = 0;
- }
-#else
- xpctxt->namespaces = comp->nsList;
- xpctxt->nsNr = comp->nsNr;
-#endif
- res = xmlXPathCompiledEval(comp->comp, xpctxt);
+ res = xsltPreCompEval(ctxt, node, comp);
- xpctxt->contextSize = oldXPContextSize;
- xpctxt->proximityPosition = oldXPProximityPosition;
if (res != NULL) {
if (res->type == XPATH_NODESET) {
list = res->nodesetval; /* consume the node set */
@@ -5153,8 +5188,6 @@ error:
/*
* Restore context states.
*/
- xpctxt->nsNr = oldXPNsNr;
- xpctxt->namespaces = oldXPNamespaces;
xpctxt->doc = oldXPDoc;
xpctxt->contextSize = oldXPContextSize;
xpctxt->proximityPosition = oldXPProximityPosition;
@@ -5210,12 +5243,6 @@ xsltChoose(xsltTransformContextPtr ctxt, xmlNodePtr contextNode,
{
int testRes = 0, res = 0;
- xmlXPathContextPtr xpctxt = ctxt->xpathCtxt;
- xmlDocPtr oldXPContextDoc = xpctxt->doc;
- int oldXPProximityPosition = xpctxt->proximityPosition;
- int oldXPContextSize = xpctxt->contextSize;
- xmlNsPtr *oldXPNamespaces = xpctxt->namespaces;
- int oldXPNsNr = xpctxt->nsNr;
#ifdef XSLT_REFACTORED
xsltStyleItemWhenPtr wcomp = NULL;
@@ -5252,27 +5279,8 @@ xsltChoose(xsltTransformContextPtr ctxt, xmlNodePtr contextNode,
"xsltChoose: test %s\n", wcomp->test));
#endif
- xpctxt->node = contextNode;
- xpctxt->doc = oldXPContextDoc;
- xpctxt->proximityPosition = oldXPProximityPosition;
- xpctxt->contextSize = oldXPContextSize;
-
-#ifdef XSLT_REFACTORED
- if (wcomp->inScopeNs != NULL) {
- xpctxt->namespaces = wcomp->inScopeNs->list;
- xpctxt->nsNr = wcomp->inScopeNs->xpathNumber;
- } else {
- xpctxt->namespaces = NULL;
- xpctxt->nsNr = 0;
- }
-#else
- xpctxt->namespaces = wcomp->nsList;
- xpctxt->nsNr = wcomp->nsNr;
-#endif
-
-
#ifdef XSLT_FAST_IF
- res = xmlXPathCompiledEvalToBoolean(wcomp->comp, xpctxt);
+ res = xsltPreCompEvalToBoolean(ctxt, contextNode, wcomp);
if (res == -1) {
ctxt->state = XSLT_STATE_STOPPED;
@@ -5282,7 +5290,7 @@ xsltChoose(xsltTransformContextPtr ctxt, xmlNodePtr contextNode,
#else /* XSLT_FAST_IF */
- res = xmlXPathCompiledEval(wcomp->comp, xpctxt);
+ res = xsltPreCompEval(ctxt, cotextNode, wcomp);
if (res != NULL) {
if (res->type != XPATH_BOOLEAN)
@@ -5331,22 +5339,10 @@ xsltChoose(xsltTransformContextPtr ctxt, xmlNodePtr contextNode,
#endif
goto test_is_true;
}
- xpctxt->node = contextNode;
- xpctxt->doc = oldXPContextDoc;
- xpctxt->proximityPosition = oldXPProximityPosition;
- xpctxt->contextSize = oldXPContextSize;
- xpctxt->namespaces = oldXPNamespaces;
- xpctxt->nsNr = oldXPNsNr;
goto exit;
test_is_true:
- xpctxt->node = contextNode;
- xpctxt->doc = oldXPContextDoc;
- xpctxt->proximityPosition = oldXPProximityPosition;
- xpctxt->contextSize = oldXPContextSize;
- xpctxt->namespaces = oldXPNamespaces;
- xpctxt->nsNr = oldXPNsNr;
goto process_sequence;
}
@@ -5400,38 +5396,9 @@ xsltIf(xsltTransformContextPtr ctxt, xmlNodePtr contextNode,
#ifdef XSLT_FAST_IF
{
- xmlXPathContextPtr xpctxt = ctxt->xpathCtxt;
- xmlDocPtr oldXPContextDoc = xpctxt->doc;
- xmlNsPtr *oldXPNamespaces = xpctxt->namespaces;
- xmlNodePtr oldXPContextNode = xpctxt->node;
- int oldXPProximityPosition = xpctxt->proximityPosition;
- int oldXPContextSize = xpctxt->contextSize;
- int oldXPNsNr = xpctxt->nsNr;
xmlDocPtr oldLocalFragmentTop = ctxt->localRVT;
- xpctxt->node = contextNode;
- if (comp != NULL) {
-
-#ifdef XSLT_REFACTORED
- if (comp->inScopeNs != NULL) {
- xpctxt->namespaces = comp->inScopeNs->list;
- xpctxt->nsNr = comp->inScopeNs->xpathNumber;
- } else {
- xpctxt->namespaces = NULL;
- xpctxt->nsNr = 0;
- }
-#else
- xpctxt->namespaces = comp->nsList;
- xpctxt->nsNr = comp->nsNr;
-#endif
- } else {
- xpctxt->namespaces = NULL;
- xpctxt->nsNr = 0;
- }
- /*
- * This XPath function is optimized for boolean results.
- */
- res = xmlXPathCompiledEvalToBoolean(comp->comp, xpctxt);
+ res = xsltPreCompEvalToBoolean(ctxt, contextNode, comp);
/*
* Cleanup fragments created during evaluation of the
@@ -5439,13 +5406,6 @@ xsltIf(xsltTransformContextPtr ctxt, xmlNodePtr contextNode,
*/
if (oldLocalFragmentTop != ctxt->localRVT)
xsltReleaseLocalRVTs(ctxt, oldLocalFragmentTop);
-
- xpctxt->doc = oldXPContextDoc;
- xpctxt->node = oldXPContextNode;
- xpctxt->contextSize = oldXPContextSize;
- xpctxt->proximityPosition = oldXPProximityPosition;
- xpctxt->nsNr = oldXPNsNr;
- xpctxt->namespaces = oldXPNamespaces;
}
#ifdef WITH_XSLT_DEBUG_PROCESS
@@ -5467,51 +5427,10 @@ xsltIf(xsltTransformContextPtr ctxt, xmlNodePtr contextNode,
#else /* XSLT_FAST_IF */
{
- xmlXPathObjectPtr xpobj = NULL;
/*
* OLD CODE:
*/
- {
- xmlXPathContextPtr xpctxt = ctxt->xpathCtxt;
- xmlDocPtr oldXPContextDoc = xpctxt->doc;
- xmlNsPtr *oldXPNamespaces = xpctxt->namespaces;
- xmlNodePtr oldXPContextNode = xpctxt->node;
- int oldXPProximityPosition = xpctxt->proximityPosition;
- int oldXPContextSize = xpctxt->contextSize;
- int oldXPNsNr = xpctxt->nsNr;
-
- xpctxt->node = contextNode;
- if (comp != NULL) {
-
-#ifdef XSLT_REFACTORED
- if (comp->inScopeNs != NULL) {
- xpctxt->namespaces = comp->inScopeNs->list;
- xpctxt->nsNr = comp->inScopeNs->xpathNumber;
- } else {
- xpctxt->namespaces = NULL;
- xpctxt->nsNr = 0;
- }
-#else
- xpctxt->namespaces = comp->nsList;
- xpctxt->nsNr = comp->nsNr;
-#endif
- } else {
- xpctxt->namespaces = NULL;
- xpctxt->nsNr = 0;
- }
-
- /*
- * This XPath function is optimized for boolean results.
- */
- xpobj = xmlXPathCompiledEval(comp->comp, xpctxt);
-
- xpctxt->doc = oldXPContextDoc;
- xpctxt->node = oldXPContextNode;
- xpctxt->contextSize = oldXPContextSize;
- xpctxt->proximityPosition = oldXPProximityPosition;
- xpctxt->nsNr = oldXPNsNr;
- xpctxt->namespaces = oldXPNamespaces;
- }
+ xmlXPathObjectPtr xpobj = xsltPreCompEval(ctxt, contextNode, comp);
if (xpobj != NULL) {
if (xpobj->type != XPATH_BOOLEAN)
xpobj = xmlXPathConvertBoolean(xpobj);
@@ -5618,27 +5537,11 @@ xsltForEach(xsltTransformContextPtr ctxt, xmlNodePtr contextNode,
oldXPDoc = xpctxt->doc;
oldXPProximityPosition = xpctxt->proximityPosition;
oldXPContextSize = xpctxt->contextSize;
- /*
- * Set up XPath.
- */
- xpctxt->node = contextNode;
-#ifdef XSLT_REFACTORED
- if (comp->inScopeNs != NULL) {
- xpctxt->namespaces = comp->inScopeNs->list;
- xpctxt->nsNr = comp->inScopeNs->xpathNumber;
- } else {
- xpctxt->namespaces = NULL;
- xpctxt->nsNr = 0;
- }
-#else
- xpctxt->namespaces = comp->nsList;
- xpctxt->nsNr = comp->nsNr;
-#endif
/*
* Evaluate the 'select' expression.
*/
- res = xmlXPathCompiledEval(comp->comp, ctxt->xpathCtxt);
+ res = xsltPreCompEval(ctxt, contextNode, comp);
if (res != NULL) {
if (res->type == XPATH_NODESET)
@@ -5669,13 +5572,6 @@ xsltForEach(xsltTransformContextPtr ctxt, xmlNodePtr contextNode,
#endif
/*
- * Restore XPath states for the "current node".
- */
- xpctxt->contextSize = oldXPContextSize;
- xpctxt->proximityPosition = oldXPProximityPosition;
- xpctxt->node = contextNode;
-
- /*
* Set the list; this has to be done already here for xsltDoSortFunction().
*/
ctxt->nodeList = list;
@@ -6076,8 +5972,7 @@ xsltApplyStylesheetInternal(xsltStylesheetPtr style, xmlDocPtr doc,
#endif
} else if (xmlStrEqual(method, (const xmlChar *) "xhtml")) {
xsltTransformError(ctxt, NULL, (xmlNodePtr) doc,
- "xsltApplyStylesheetInternal: unsupported method xhtml, using html\n",
- style->method);
+ "xsltApplyStylesheetInternal: unsupported method xhtml, using html\n");
ctxt->type = XSLT_OUTPUT_HTML;
res = htmlNewDoc(doctypeSystem, doctypePublic);
if (res == NULL)
@@ -6103,8 +5998,8 @@ xsltApplyStylesheetInternal(xsltStylesheetPtr style, xmlDocPtr doc,
#endif
} else {
xsltTransformError(ctxt, NULL, (xmlNodePtr) doc,
- "xsltApplyStylesheetInternal: unsupported method %s\n",
- style->method);
+ "xsltApplyStylesheetInternal: unsupported method (%s)\n",
+ method);
goto error;
}
} else {
« no previous file with comments | « third_party/libxslt/libxslt/preproc.c ('k') | third_party/libxslt/libxslt/variables.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698