mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 21:12:59 +00:00
[LIBXML2] Update to version 2.10.0. CORE-17766
This commit is contained in:
parent
608bbe1136
commit
911153da10
80 changed files with 2351 additions and 20735 deletions
158
sdk/lib/3rdparty/libxml2/xpath.c
vendored
158
sdk/lib/3rdparty/libxml2/xpath.c
vendored
|
@ -25,22 +25,9 @@
|
|||
#include <limits.h>
|
||||
#include <string.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
#ifdef HAVE_MATH_H
|
||||
#include <math.h>
|
||||
#endif
|
||||
#ifdef HAVE_FLOAT_H
|
||||
#include <float.h>
|
||||
#endif
|
||||
#ifdef HAVE_CTYPE_H
|
||||
#include <ctype.h>
|
||||
#endif
|
||||
#ifdef HAVE_SIGNAL_H
|
||||
#include <signal.h>
|
||||
#endif
|
||||
|
||||
#include <libxml/xmlmemory.h>
|
||||
#include <libxml/tree.h>
|
||||
|
@ -49,7 +36,7 @@
|
|||
#include <libxml/xpathInternals.h>
|
||||
#include <libxml/parserInternals.h>
|
||||
#include <libxml/hash.h>
|
||||
#ifdef LIBXML_XPTR_ENABLED
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
#include <libxml/xpointer.h>
|
||||
#endif
|
||||
#ifdef LIBXML_DEBUG_ENABLED
|
||||
|
@ -495,16 +482,25 @@ double xmlXPathNINF = 0.0;
|
|||
/**
|
||||
* xmlXPathInit:
|
||||
*
|
||||
* DEPRECATED: This function will be made private. Call xmlInitParser to
|
||||
* initialize the library.
|
||||
*
|
||||
* Initialize the XPath environment
|
||||
*/
|
||||
ATTRIBUTE_NO_SANITIZE("float-divide-by-zero")
|
||||
void
|
||||
xmlXPathInit(void) {
|
||||
#if defined(NAN) && defined(INFINITY)
|
||||
xmlXPathNAN = NAN;
|
||||
xmlXPathPINF = INFINITY;
|
||||
xmlXPathNINF = -INFINITY;
|
||||
#else
|
||||
/* MSVC doesn't allow division by zero in constant expressions. */
|
||||
double zero = 0.0;
|
||||
xmlXPathNAN = 0.0 / zero;
|
||||
xmlXPathPINF = 1.0 / zero;
|
||||
xmlXPathNINF = -xmlXPathPINF;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -590,7 +586,7 @@ static int xmlXPathDisableOptimizer = 0;
|
|||
/*
|
||||
* The array xmlXPathErrorMessages corresponds to the enum xmlXPathError
|
||||
*/
|
||||
static const char *xmlXPathErrorMessages[] = {
|
||||
static const char* const xmlXPathErrorMessages[] = {
|
||||
"Ok\n",
|
||||
"Number encoding\n",
|
||||
"Unfinished literal\n",
|
||||
|
@ -911,7 +907,7 @@ typedef enum {
|
|||
XPATH_OP_PREDICATE,
|
||||
XPATH_OP_FILTER, /* 16 */
|
||||
XPATH_OP_SORT /* 17 */
|
||||
#ifdef LIBXML_XPTR_ENABLED
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
,XPATH_OP_RANGETO
|
||||
#endif
|
||||
} xmlXPathOp;
|
||||
|
@ -1362,7 +1358,7 @@ xmlXPathDebugDumpValueTree(FILE *output, xmlNodeSetPtr cur, int depth) {
|
|||
fprintf(output, "%d", i + 1);
|
||||
xmlXPathDebugDumpNodeList(output, cur->nodeTab[0]->children, depth + 1);
|
||||
}
|
||||
#if defined(LIBXML_XPTR_ENABLED)
|
||||
#if defined(LIBXML_XPTR_LOCS_ENABLED)
|
||||
static void
|
||||
xmlXPathDebugDumpLocationSet(FILE *output, xmlLocationSetPtr cur, int depth) {
|
||||
int i;
|
||||
|
@ -1385,7 +1381,7 @@ xmlXPathDebugDumpLocationSet(FILE *output, xmlLocationSetPtr cur, int depth) {
|
|||
xmlXPathDebugDumpObject(output, cur->locTab[i], depth + 1);
|
||||
}
|
||||
}
|
||||
#endif /* LIBXML_XPTR_ENABLED */
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
|
||||
/**
|
||||
* xmlXPathDebugDumpObject:
|
||||
|
@ -1454,6 +1450,7 @@ xmlXPathDebugDumpObject(FILE *output, xmlXPathObjectPtr cur, int depth) {
|
|||
xmlDebugDumpString(output, cur->stringval);
|
||||
fprintf(output, "\n");
|
||||
break;
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_POINT:
|
||||
fprintf(output, "Object is a point : index %d in node", cur->index);
|
||||
xmlXPathDebugDumpNode(output, (xmlNodePtr) cur->user, depth + 1);
|
||||
|
@ -1489,12 +1486,11 @@ xmlXPathDebugDumpObject(FILE *output, xmlXPathObjectPtr cur, int depth) {
|
|||
}
|
||||
break;
|
||||
case XPATH_LOCATIONSET:
|
||||
#if defined(LIBXML_XPTR_ENABLED)
|
||||
fprintf(output, "Object is a Location Set:\n");
|
||||
xmlXPathDebugDumpLocationSet(output,
|
||||
(xmlLocationSetPtr) cur->user, depth);
|
||||
#endif
|
||||
break;
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
case XPATH_USERS:
|
||||
fprintf(output, "Object is user defined\n");
|
||||
break;
|
||||
|
@ -1662,7 +1658,7 @@ xmlXPathDebugDumpStepOp(FILE *output, xmlXPathCompExprPtr comp,
|
|||
case XPATH_OP_ARG: fprintf(output, "ARG"); break;
|
||||
case XPATH_OP_PREDICATE: fprintf(output, "PREDICATE"); break;
|
||||
case XPATH_OP_FILTER: fprintf(output, "FILTER"); break;
|
||||
#ifdef LIBXML_XPTR_ENABLED
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_OP_RANGETO: fprintf(output, "RANGETO"); break;
|
||||
#endif
|
||||
default:
|
||||
|
@ -1854,6 +1850,7 @@ xmlXPathDebugObjUsageRequested(xmlXPathContextPtr ctxt,
|
|||
case XPATH_STRING:
|
||||
cache->dbgReusedString++;
|
||||
break;
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_POINT:
|
||||
cache->dbgReusedPoint++;
|
||||
break;
|
||||
|
@ -1863,6 +1860,7 @@ xmlXPathDebugObjUsageRequested(xmlXPathContextPtr ctxt,
|
|||
case XPATH_LOCATIONSET:
|
||||
cache->dbgReusedLocset++;
|
||||
break;
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
case XPATH_USERS:
|
||||
cache->dbgReusedUsers++;
|
||||
break;
|
||||
|
@ -1921,6 +1919,7 @@ xmlXPathDebugObjUsageRequested(xmlXPathContextPtr ctxt,
|
|||
xmlXPathDebugObjMaxString =
|
||||
xmlXPathDebugObjCounterString;
|
||||
break;
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_POINT:
|
||||
if (! isCached)
|
||||
xmlXPathDebugObjTotalPoint++;
|
||||
|
@ -1948,6 +1947,7 @@ xmlXPathDebugObjUsageRequested(xmlXPathContextPtr ctxt,
|
|||
xmlXPathDebugObjMaxLocset =
|
||||
xmlXPathDebugObjCounterLocset;
|
||||
break;
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
case XPATH_USERS:
|
||||
if (! isCached)
|
||||
xmlXPathDebugObjTotalUsers++;
|
||||
|
@ -2008,6 +2008,7 @@ xmlXPathDebugObjUsageReleased(xmlXPathContextPtr ctxt,
|
|||
case XPATH_STRING:
|
||||
cache->dbgCachedString++;
|
||||
break;
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_POINT:
|
||||
cache->dbgCachedPoint++;
|
||||
break;
|
||||
|
@ -2017,6 +2018,7 @@ xmlXPathDebugObjUsageReleased(xmlXPathContextPtr ctxt,
|
|||
case XPATH_LOCATIONSET:
|
||||
cache->dbgCachedLocset++;
|
||||
break;
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
case XPATH_USERS:
|
||||
cache->dbgCachedUsers++;
|
||||
break;
|
||||
|
@ -2045,6 +2047,7 @@ xmlXPathDebugObjUsageReleased(xmlXPathContextPtr ctxt,
|
|||
case XPATH_STRING:
|
||||
xmlXPathDebugObjCounterString--;
|
||||
break;
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_POINT:
|
||||
xmlXPathDebugObjCounterPoint--;
|
||||
break;
|
||||
|
@ -2054,6 +2057,7 @@ xmlXPathDebugObjUsageReleased(xmlXPathContextPtr ctxt,
|
|||
case XPATH_LOCATIONSET:
|
||||
xmlXPathDebugObjCounterLocset--;
|
||||
break;
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
case XPATH_USERS:
|
||||
xmlXPathDebugObjCounterUsers--;
|
||||
break;
|
||||
|
@ -2706,9 +2710,11 @@ xmlXPathCacheConvertString(xmlXPathContextPtr ctxt, xmlXPathObjectPtr val) {
|
|||
res = xmlXPathCastNumberToString(val->floatval);
|
||||
break;
|
||||
case XPATH_USERS:
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_POINT:
|
||||
case XPATH_RANGE:
|
||||
case XPATH_LOCATIONSET:
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
TODO;
|
||||
break;
|
||||
}
|
||||
|
@ -5387,8 +5393,10 @@ xmlXPathObjectCopy(xmlXPathObjectPtr val) {
|
|||
switch (val->type) {
|
||||
case XPATH_BOOLEAN:
|
||||
case XPATH_NUMBER:
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_POINT:
|
||||
case XPATH_RANGE:
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
break;
|
||||
case XPATH_STRING:
|
||||
ret->stringval = xmlStrdup(val->stringval);
|
||||
|
@ -5432,8 +5440,8 @@ xmlXPathObjectCopy(xmlXPathObjectPtr val) {
|
|||
/* Do not deallocate the copied tree value */
|
||||
ret->boolval = 0;
|
||||
break;
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_LOCATIONSET:
|
||||
#ifdef LIBXML_XPTR_ENABLED
|
||||
{
|
||||
xmlLocationSetPtr loc = val->user;
|
||||
ret->user = (void *) xmlXPtrLocationSetMerge(NULL, loc);
|
||||
|
@ -5476,7 +5484,7 @@ xmlXPathFreeObject(xmlXPathObjectPtr obj) {
|
|||
if (obj->nodesetval != NULL)
|
||||
xmlXPathFreeNodeSet(obj->nodesetval);
|
||||
}
|
||||
#ifdef LIBXML_XPTR_ENABLED
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
} else if (obj->type == XPATH_LOCATIONSET) {
|
||||
if (obj->user != NULL)
|
||||
xmlXPtrFreeLocationSet(obj->user);
|
||||
|
@ -5566,7 +5574,7 @@ xmlXPathReleaseObject(xmlXPathContextPtr ctxt, xmlXPathObjectPtr obj)
|
|||
goto obj_cached;
|
||||
}
|
||||
break;
|
||||
#ifdef LIBXML_XPTR_ENABLED
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_LOCATIONSET:
|
||||
if (obj->user != NULL) {
|
||||
xmlXPtrFreeLocationSet(obj->user);
|
||||
|
@ -5769,9 +5777,11 @@ xmlXPathCastToString(xmlXPathObjectPtr val) {
|
|||
break;
|
||||
}
|
||||
case XPATH_USERS:
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_POINT:
|
||||
case XPATH_RANGE:
|
||||
case XPATH_LOCATIONSET:
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
TODO
|
||||
ret = xmlStrdup((const xmlChar *) "");
|
||||
break;
|
||||
|
@ -5814,9 +5824,11 @@ xmlXPathConvertString(xmlXPathObjectPtr val) {
|
|||
res = xmlXPathCastNumberToString(val->floatval);
|
||||
break;
|
||||
case XPATH_USERS:
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_POINT:
|
||||
case XPATH_RANGE:
|
||||
case XPATH_LOCATIONSET:
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
TODO;
|
||||
break;
|
||||
}
|
||||
|
@ -5934,9 +5946,11 @@ xmlXPathCastToNumber(xmlXPathObjectPtr val) {
|
|||
ret = xmlXPathCastBooleanToNumber(val->boolval);
|
||||
break;
|
||||
case XPATH_USERS:
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_POINT:
|
||||
case XPATH_RANGE:
|
||||
case XPATH_LOCATIONSET:
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
TODO;
|
||||
ret = xmlXPathNAN;
|
||||
break;
|
||||
|
@ -6046,9 +6060,11 @@ xmlXPathCastToBoolean (xmlXPathObjectPtr val) {
|
|||
ret = val->boolval;
|
||||
break;
|
||||
case XPATH_USERS:
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_POINT:
|
||||
case XPATH_RANGE:
|
||||
case XPATH_LOCATIONSET:
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
TODO;
|
||||
ret = 0;
|
||||
break;
|
||||
|
@ -6985,9 +7001,11 @@ xmlXPathEqualValuesCommon(xmlXPathParserContextPtr ctxt,
|
|||
ret = (arg1->boolval == ret);
|
||||
break;
|
||||
case XPATH_USERS:
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_POINT:
|
||||
case XPATH_RANGE:
|
||||
case XPATH_LOCATIONSET:
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
TODO
|
||||
break;
|
||||
case XPATH_NODESET:
|
||||
|
@ -7042,9 +7060,11 @@ xmlXPathEqualValuesCommon(xmlXPathParserContextPtr ctxt,
|
|||
}
|
||||
break;
|
||||
case XPATH_USERS:
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_POINT:
|
||||
case XPATH_RANGE:
|
||||
case XPATH_LOCATIONSET:
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
TODO
|
||||
break;
|
||||
case XPATH_NODESET:
|
||||
|
@ -7103,9 +7123,11 @@ xmlXPathEqualValuesCommon(xmlXPathParserContextPtr ctxt,
|
|||
}
|
||||
break;
|
||||
case XPATH_USERS:
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_POINT:
|
||||
case XPATH_RANGE:
|
||||
case XPATH_LOCATIONSET:
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
TODO
|
||||
break;
|
||||
case XPATH_NODESET:
|
||||
|
@ -7114,9 +7136,11 @@ xmlXPathEqualValuesCommon(xmlXPathParserContextPtr ctxt,
|
|||
}
|
||||
break;
|
||||
case XPATH_USERS:
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_POINT:
|
||||
case XPATH_RANGE:
|
||||
case XPATH_LOCATIONSET:
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
TODO
|
||||
break;
|
||||
case XPATH_NODESET:
|
||||
|
@ -7199,9 +7223,11 @@ xmlXPathEqualValues(xmlXPathParserContextPtr ctxt) {
|
|||
ret = xmlXPathEqualNodeSetString(arg1, arg2->stringval, 0);
|
||||
break;
|
||||
case XPATH_USERS:
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_POINT:
|
||||
case XPATH_RANGE:
|
||||
case XPATH_LOCATIONSET:
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
TODO
|
||||
break;
|
||||
}
|
||||
|
@ -7284,9 +7310,11 @@ xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt) {
|
|||
ret = xmlXPathEqualNodeSetString(arg1, arg2->stringval,1);
|
||||
break;
|
||||
case XPATH_USERS:
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_POINT:
|
||||
case XPATH_RANGE:
|
||||
case XPATH_LOCATIONSET:
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
TODO
|
||||
break;
|
||||
}
|
||||
|
@ -7651,9 +7679,6 @@ xmlXPathNextChild(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
|
|||
case XML_DOCUMENT_TYPE_NODE:
|
||||
case XML_DOCUMENT_FRAG_NODE:
|
||||
case XML_HTML_DOCUMENT_NODE:
|
||||
#ifdef LIBXML_DOCB_ENABLED
|
||||
case XML_DOCB_DOCUMENT_NODE:
|
||||
#endif
|
||||
return(((xmlDocPtr) ctxt->context->node)->children);
|
||||
case XML_ELEMENT_DECL:
|
||||
case XML_ATTRIBUTE_DECL:
|
||||
|
@ -7709,9 +7734,6 @@ xmlXPathNextChildElement(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
|
|||
return(NULL);
|
||||
case XML_DOCUMENT_NODE:
|
||||
case XML_HTML_DOCUMENT_NODE:
|
||||
#ifdef LIBXML_DOCB_ENABLED
|
||||
case XML_DOCB_DOCUMENT_NODE:
|
||||
#endif
|
||||
return(xmlDocGetRootElement((xmlDocPtr) cur));
|
||||
default:
|
||||
return(NULL);
|
||||
|
@ -7772,9 +7794,6 @@ xmlXPathNextDescendantOrSelfElemParent(xmlNodePtr cur,
|
|||
case XML_XINCLUDE_START:
|
||||
case XML_DOCUMENT_FRAG_NODE:
|
||||
case XML_DOCUMENT_NODE:
|
||||
#ifdef LIBXML_DOCB_ENABLED
|
||||
case XML_DOCB_DOCUMENT_NODE:
|
||||
#endif
|
||||
case XML_HTML_DOCUMENT_NODE:
|
||||
return(contextNode);
|
||||
default:
|
||||
|
@ -7799,9 +7818,6 @@ xmlXPathNextDescendantOrSelfElemParent(xmlNodePtr cur,
|
|||
break;
|
||||
/* Not sure if we need those here. */
|
||||
case XML_DOCUMENT_NODE:
|
||||
#ifdef LIBXML_DOCB_ENABLED
|
||||
case XML_DOCB_DOCUMENT_NODE:
|
||||
#endif
|
||||
case XML_HTML_DOCUMENT_NODE:
|
||||
if (cur != start)
|
||||
return(cur);
|
||||
|
@ -7968,9 +7984,6 @@ xmlXPathNextParent(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
|
|||
case XML_DOCUMENT_TYPE_NODE:
|
||||
case XML_DOCUMENT_FRAG_NODE:
|
||||
case XML_HTML_DOCUMENT_NODE:
|
||||
#ifdef LIBXML_DOCB_ENABLED
|
||||
case XML_DOCB_DOCUMENT_NODE:
|
||||
#endif
|
||||
return(NULL);
|
||||
case XML_NAMESPACE_DECL: {
|
||||
xmlNsPtr ns = (xmlNsPtr) ctxt->context->node;
|
||||
|
@ -8041,9 +8054,6 @@ xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
|
|||
case XML_DOCUMENT_TYPE_NODE:
|
||||
case XML_DOCUMENT_FRAG_NODE:
|
||||
case XML_HTML_DOCUMENT_NODE:
|
||||
#ifdef LIBXML_DOCB_ENABLED
|
||||
case XML_DOCB_DOCUMENT_NODE:
|
||||
#endif
|
||||
return(NULL);
|
||||
case XML_NAMESPACE_DECL: {
|
||||
xmlNsPtr ns = (xmlNsPtr) ctxt->context->node;
|
||||
|
@ -8102,9 +8112,6 @@ xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
|
|||
case XML_DOCUMENT_TYPE_NODE:
|
||||
case XML_DOCUMENT_FRAG_NODE:
|
||||
case XML_HTML_DOCUMENT_NODE:
|
||||
#ifdef LIBXML_DOCB_ENABLED
|
||||
case XML_DOCB_DOCUMENT_NODE:
|
||||
#endif
|
||||
return(NULL);
|
||||
}
|
||||
return(NULL);
|
||||
|
@ -10618,7 +10625,7 @@ xmlXPathCompPathExpr(xmlXPathParserContextPtr ctxt) {
|
|||
"PathExpr: Type search\n");
|
||||
#endif
|
||||
lc = 1;
|
||||
#ifdef LIBXML_XPTR_ENABLED
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
} else if (ctxt->xptr &&
|
||||
xmlStrEqual(name, BAD_CAST "range-to")) {
|
||||
lc = 1;
|
||||
|
@ -11269,7 +11276,7 @@ xmlXPathIsAxisName(const xmlChar *name) {
|
|||
*/
|
||||
static void
|
||||
xmlXPathCompStep(xmlXPathParserContextPtr ctxt) {
|
||||
#ifdef LIBXML_XPTR_ENABLED
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
int rangeto = 0;
|
||||
int op2 = -1;
|
||||
#endif
|
||||
|
@ -11294,7 +11301,7 @@ xmlXPathCompStep(xmlXPathParserContextPtr ctxt) {
|
|||
/*
|
||||
* The modification needed for XPointer change to the production
|
||||
*/
|
||||
#ifdef LIBXML_XPTR_ENABLED
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
if (ctxt->xptr) {
|
||||
name = xmlXPathParseNCName(ctxt);
|
||||
if ((name != NULL) && (xmlStrEqual(name, BAD_CAST "range-to"))) {
|
||||
|
@ -11379,7 +11386,7 @@ xmlXPathCompStep(xmlXPathParserContextPtr ctxt) {
|
|||
xmlGenericErrorContextNodeSet(stdout, ctxt->value->nodesetval);
|
||||
#endif
|
||||
|
||||
#ifdef LIBXML_XPTR_ENABLED
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
eval_predicates:
|
||||
#endif
|
||||
op1 = ctxt->comp->last;
|
||||
|
@ -11390,7 +11397,7 @@ eval_predicates:
|
|||
xmlXPathCompPredicate(ctxt, 0);
|
||||
}
|
||||
|
||||
#ifdef LIBXML_XPTR_ENABLED
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
if (rangeto) {
|
||||
PUSH_BINARY_EXPR(XPATH_OP_RANGETO, op2, op1, 0, 0);
|
||||
} else
|
||||
|
@ -11733,7 +11740,7 @@ xmlXPathNodeSetFilter(xmlXPathParserContextPtr ctxt,
|
|||
xpctxt->proximityPosition = oldpp;
|
||||
}
|
||||
|
||||
#ifdef LIBXML_XPTR_ENABLED
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
/**
|
||||
* xmlXPathLocationSetFilter:
|
||||
* @ctxt: the XPath Parser context
|
||||
|
@ -11850,7 +11857,7 @@ xmlXPathLocationSetFilter(xmlXPathParserContextPtr ctxt,
|
|||
xpctxt->contextSize = oldcs;
|
||||
xpctxt->proximityPosition = oldpp;
|
||||
}
|
||||
#endif /* LIBXML_XPTR_ENABLED */
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
|
||||
/**
|
||||
* xmlXPathCompOpEvalPredicate:
|
||||
|
@ -12268,9 +12275,6 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
|
|||
switch (cur->type) {
|
||||
case XML_DOCUMENT_NODE:
|
||||
case XML_HTML_DOCUMENT_NODE:
|
||||
#ifdef LIBXML_DOCB_ENABLED
|
||||
case XML_DOCB_DOCUMENT_NODE:
|
||||
#endif
|
||||
case XML_ELEMENT_NODE:
|
||||
case XML_ATTRIBUTE_NODE:
|
||||
case XML_PI_NODE:
|
||||
|
@ -12909,7 +12913,7 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
|
|||
if (ctxt->value == NULL)
|
||||
return (total);
|
||||
|
||||
#ifdef LIBXML_XPTR_ENABLED
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
/*
|
||||
* Hum are we filtering the result of an XPointer expression
|
||||
*/
|
||||
|
@ -12924,7 +12928,7 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
|
|||
|
||||
return (total);
|
||||
}
|
||||
#endif /* LIBXML_XPTR_ENABLED */
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
|
||||
CHECK_TYPE0(XPATH_NODESET);
|
||||
set = ctxt->value->nodesetval;
|
||||
|
@ -13332,7 +13336,7 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op)
|
|||
if (ctxt->value == NULL)
|
||||
break;
|
||||
|
||||
#ifdef LIBXML_XPTR_ENABLED
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
/*
|
||||
* Hum are we filtering the result of an XPointer expression
|
||||
*/
|
||||
|
@ -13342,7 +13346,7 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op)
|
|||
1, locset->locNr);
|
||||
break;
|
||||
}
|
||||
#endif /* LIBXML_XPTR_ENABLED */
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
|
||||
CHECK_TYPE0(XPATH_NODESET);
|
||||
set = ctxt->value->nodesetval;
|
||||
|
@ -13363,7 +13367,7 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op)
|
|||
xmlXPathNodeSetSort(ctxt->value->nodesetval);
|
||||
}
|
||||
break;
|
||||
#ifdef LIBXML_XPTR_ENABLED
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_OP_RANGETO:{
|
||||
xmlXPathObjectPtr range;
|
||||
xmlXPathObjectPtr res, obj;
|
||||
|
@ -13521,7 +13525,7 @@ rangeto_error:
|
|||
ctxt->context->proximityPosition = oldpp;
|
||||
break;
|
||||
}
|
||||
#endif /* LIBXML_XPTR_ENABLED */
|
||||
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
||||
default:
|
||||
xmlGenericError(xmlGenericErrorContext,
|
||||
"XPath: unknown precompiled operation %d\n", op->op);
|
||||
|
@ -13700,9 +13704,6 @@ xmlXPathRunStreamEval(xmlXPathContextPtr ctxt, xmlPatternPtr comp,
|
|||
case XML_DOCUMENT_NODE:
|
||||
case XML_DOCUMENT_FRAG_NODE:
|
||||
case XML_HTML_DOCUMENT_NODE:
|
||||
#ifdef LIBXML_DOCB_ENABLED
|
||||
case XML_DOCB_DOCUMENT_NODE:
|
||||
#endif
|
||||
cur = ctxt->node;
|
||||
break;
|
||||
case XML_ATTRIBUTE_NODE:
|
||||
|
@ -13883,19 +13884,18 @@ static int
|
|||
xmlXPathRunEval(xmlXPathParserContextPtr ctxt, int toBool)
|
||||
{
|
||||
xmlXPathCompExprPtr comp;
|
||||
int oldDepth;
|
||||
|
||||
if ((ctxt == NULL) || (ctxt->comp == NULL))
|
||||
return(-1);
|
||||
|
||||
ctxt->context->depth = 0;
|
||||
|
||||
if (ctxt->valueTab == NULL) {
|
||||
/* Allocate the value stack */
|
||||
ctxt->valueTab = (xmlXPathObjectPtr *)
|
||||
xmlMalloc(10 * sizeof(xmlXPathObjectPtr));
|
||||
if (ctxt->valueTab == NULL) {
|
||||
xmlXPathPErrMemory(ctxt, "creating evaluation context\n");
|
||||
xmlFree(ctxt);
|
||||
return(-1);
|
||||
}
|
||||
ctxt->valueNr = 0;
|
||||
ctxt->valueMax = 10;
|
||||
|
@ -13942,11 +13942,13 @@ xmlXPathRunEval(xmlXPathParserContextPtr ctxt, int toBool)
|
|||
"xmlXPathRunEval: last is less than zero\n");
|
||||
return(-1);
|
||||
}
|
||||
oldDepth = ctxt->context->depth;
|
||||
if (toBool)
|
||||
return(xmlXPathCompOpEvalToBoolean(ctxt,
|
||||
&comp->steps[comp->last], 0));
|
||||
else
|
||||
xmlXPathCompOpEval(ctxt, &comp->steps[comp->last]);
|
||||
ctxt->context->depth = oldDepth;
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
@ -14032,7 +14034,7 @@ xmlXPathEvaluatePredicateResult(xmlXPathParserContextPtr ctxt,
|
|||
return(res->nodesetval->nodeNr != 0);
|
||||
case XPATH_STRING:
|
||||
return((res->stringval != NULL) && (res->stringval[0] != 0));
|
||||
#ifdef LIBXML_XPTR_ENABLED
|
||||
#ifdef LIBXML_XPTR_LOCS_ENABLED
|
||||
case XPATH_LOCATIONSET:{
|
||||
xmlLocationSetPtr ptr = res->user;
|
||||
if (ptr == NULL)
|
||||
|
@ -14217,6 +14219,7 @@ xmlXPathCompExprPtr
|
|||
xmlXPathCtxtCompile(xmlXPathContextPtr ctxt, const xmlChar *str) {
|
||||
xmlXPathParserContextPtr pctxt;
|
||||
xmlXPathCompExprPtr comp;
|
||||
int oldDepth = 0;
|
||||
|
||||
#ifdef XPATH_STREAMING
|
||||
comp = xmlXPathTryStreamCompile(ctxt, str);
|
||||
|
@ -14230,8 +14233,10 @@ xmlXPathCtxtCompile(xmlXPathContextPtr ctxt, const xmlChar *str) {
|
|||
if (pctxt == NULL)
|
||||
return NULL;
|
||||
if (ctxt != NULL)
|
||||
ctxt->depth = 0;
|
||||
oldDepth = ctxt->depth;
|
||||
xmlXPathCompileExpr(pctxt, 1);
|
||||
if (ctxt != NULL)
|
||||
ctxt->depth = oldDepth;
|
||||
|
||||
if( pctxt->error != XPATH_EXPRESSION_OK )
|
||||
{
|
||||
|
@ -14252,8 +14257,10 @@ xmlXPathCtxtCompile(xmlXPathContextPtr ctxt, const xmlChar *str) {
|
|||
comp = pctxt->comp;
|
||||
if ((comp->nbStep > 1) && (comp->last >= 0)) {
|
||||
if (ctxt != NULL)
|
||||
ctxt->depth = 0;
|
||||
oldDepth = ctxt->depth;
|
||||
xmlXPathOptimizeExpression(pctxt, &comp->steps[comp->last]);
|
||||
if (ctxt != NULL)
|
||||
ctxt->depth = oldDepth;
|
||||
}
|
||||
pctxt->comp = NULL;
|
||||
}
|
||||
|
@ -14409,6 +14416,7 @@ xmlXPathEvalExpr(xmlXPathParserContextPtr ctxt) {
|
|||
#ifdef XPATH_STREAMING
|
||||
xmlXPathCompExprPtr comp;
|
||||
#endif
|
||||
int oldDepth = 0;
|
||||
|
||||
if (ctxt == NULL) return;
|
||||
|
||||
|
@ -14422,8 +14430,10 @@ xmlXPathEvalExpr(xmlXPathParserContextPtr ctxt) {
|
|||
#endif
|
||||
{
|
||||
if (ctxt->context != NULL)
|
||||
ctxt->context->depth = 0;
|
||||
oldDepth = ctxt->context->depth;
|
||||
xmlXPathCompileExpr(ctxt, 1);
|
||||
if (ctxt->context != NULL)
|
||||
ctxt->context->depth = oldDepth;
|
||||
CHECK_ERROR;
|
||||
|
||||
/* Check for trailing characters. */
|
||||
|
@ -14432,9 +14442,11 @@ xmlXPathEvalExpr(xmlXPathParserContextPtr ctxt) {
|
|||
|
||||
if ((ctxt->comp->nbStep > 1) && (ctxt->comp->last >= 0)) {
|
||||
if (ctxt->context != NULL)
|
||||
ctxt->context->depth = 0;
|
||||
oldDepth = ctxt->context->depth;
|
||||
xmlXPathOptimizeExpression(ctxt,
|
||||
&ctxt->comp->steps[ctxt->comp->last]);
|
||||
if (ctxt->context != NULL)
|
||||
ctxt->context->depth = oldDepth;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -14725,5 +14737,3 @@ xmlXPathRegisterAllFunctions(xmlXPathContextPtr ctxt)
|
|||
}
|
||||
|
||||
#endif /* LIBXML_XPATH_ENABLED */
|
||||
#define bottom_xpath
|
||||
#include "elfgcchack.h"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue