static int compareByStringForQSort(const void *a, const void *b) { ExecState *exec = execForCompareByStringForQSort; ValueImp *va = *(ValueImp **)a; ValueImp *vb = *(ValueImp **)b; if (va->dispatchType() == UndefinedType) { return vb->dispatchType() == UndefinedType ? 0 : 1; } if (vb->dispatchType() == UndefinedType) { return -1; } return compare(va->dispatchToString(exec), vb->dispatchToString(exec)); }
static int compareWithCompareFunctionForQSort(const void *a, const void *b) { CompareWithCompareFunctionArguments *args = compareWithCompareFunctionArguments; ValueImp *va = *(ValueImp **)a; ValueImp *vb = *(ValueImp **)b; if (va->dispatchType() == UndefinedType) { return vb->dispatchType() == UndefinedType ? 0 : 1; } if (vb->dispatchType() == UndefinedType) { return -1; } args->arguments.clear(); args->arguments.append(va); args->arguments.append(vb); double compareResult = args->compareFunction->call (args->exec, args->globalObject, args->arguments).toNumber(args->exec); return compareResult < 0 ? -1 : compareResult > 0 ? 1 : 0; }