static int CompareRval(Rval rval1, Rval rval2) { if (rval1.type != rval2.type) { return -1; } switch (rval1.type) { case RVAL_TYPE_SCALAR: if (IsCf3VarString((char *) rval1.item) || IsCf3VarString((char *) rval2.item)) { return -1; // inconclusive } if (strcmp(rval1.item, rval2.item) != 0) { return false; } break; case RVAL_TYPE_LIST: return CompareRlist(rval1.item, rval2.item); case RVAL_TYPE_FNCALL: return -1; default: return -1; } return true; }
static int CompareRval(const void *rval1_item, RvalType rval1_type, const void *rval2_item, RvalType rval2_type) { if (rval1_type != rval2_type) { return -1; } switch (rval1_type) { case RVAL_TYPE_SCALAR: if (IsCf3VarString(rval1_item) || IsCf3VarString(rval2_item)) { return -1; // inconclusive } if (strcmp(rval1_item, rval2_item) != 0) { return false; } break; case RVAL_TYPE_LIST: return CompareRlist(rval1_item, rval2_item); case RVAL_TYPE_FNCALL: return -1; default: return -1; } return true; }