| 5935 | } |
| 5936 | |
| 5937 | static int |
| 5938 | xmlXPathEqualValuesCommon(xmlXPathParserContextPtr ctxt, |
| 5939 | xmlXPathObjectPtr arg1, xmlXPathObjectPtr arg2) { |
| 5940 | int ret = 0; |
| 5941 | /* |
| 5942 | *At this point we are assured neither arg1 nor arg2 |
| 5943 | *is a nodeset, so we can just pick the appropriate routine. |
| 5944 | */ |
| 5945 | switch (arg1->type) { |
| 5946 | case XPATH_UNDEFINED: |
| 5947 | break; |
| 5948 | case XPATH_BOOLEAN: |
| 5949 | switch (arg2->type) { |
| 5950 | case XPATH_UNDEFINED: |
| 5951 | break; |
| 5952 | case XPATH_BOOLEAN: |
| 5953 | ret = (arg1->boolval == arg2->boolval); |
| 5954 | break; |
| 5955 | case XPATH_NUMBER: |
| 5956 | ret = (arg1->boolval == |
| 5957 | xmlXPathCastNumberToBoolean(arg2->floatval)); |
| 5958 | break; |
| 5959 | case XPATH_STRING: |
| 5960 | if ((arg2->stringval == NULL) || |
| 5961 | (arg2->stringval[0] == 0)) ret = 0; |
| 5962 | else |
| 5963 | ret = 1; |
| 5964 | ret = (arg1->boolval == ret); |
| 5965 | break; |
| 5966 | case XPATH_USERS: |
| 5967 | #ifdef LIBXML_XPTR_LOCS_ENABLED |
| 5968 | case XPATH_POINT: |
| 5969 | case XPATH_RANGE: |
| 5970 | case XPATH_LOCATIONSET: |
| 5971 | #endif /* LIBXML_XPTR_LOCS_ENABLED */ |
| 5972 | /* TODO */ |
| 5973 | break; |
| 5974 | case XPATH_NODESET: |
| 5975 | case XPATH_XSLT_TREE: |
| 5976 | break; |
| 5977 | } |
| 5978 | break; |
| 5979 | case XPATH_NUMBER: |
| 5980 | switch (arg2->type) { |
| 5981 | case XPATH_UNDEFINED: |
| 5982 | break; |
| 5983 | case XPATH_BOOLEAN: |
| 5984 | ret = (arg2->boolval== |
| 5985 | xmlXPathCastNumberToBoolean(arg1->floatval)); |
| 5986 | break; |
| 5987 | case XPATH_STRING: |
| 5988 | valuePush(ctxt, arg2); |
| 5989 | xmlXPathNumberFunction(ctxt, 1); |
| 5990 | arg2 = valuePop(ctxt); |
| 5991 | if (ctxt->error) |
| 5992 | break; |
| 5993 | /* Falls through. */ |
| 5994 | case XPATH_NUMBER: |
no test coverage detected