static EncodedJSValue JSC_HOST_CALL IntlCollatorFuncCompare(ExecState* state) { VM& vm = state->vm(); auto scope = DECLARE_THROW_SCOPE(vm); // 10.3.4 Collator Compare Functions (ECMA-402 2.0) // 1. Let collator be the this value. // 2. Assert: Type(collator) is Object and collator has an [[initializedCollator]] internal slot whose value is true. IntlCollator* collator = jsCast<IntlCollator*>(state->thisValue()); // 3. If x is not provided, let x be undefined. // 4. If y is not provided, let y be undefined. // 5. Let X be ToString(x). JSString* x = state->argument(0).toString(state); // 6. ReturnIfAbrupt(X). RETURN_IF_EXCEPTION(scope, encodedJSValue()); // 7. Let Y be ToString(y). JSString* y = state->argument(1).toString(state); // 8. ReturnIfAbrupt(Y). RETURN_IF_EXCEPTION(scope, encodedJSValue()); // 9. Return CompareStrings(collator, X, Y). auto xViewWithString = x->viewWithUnderlyingString(*state); RETURN_IF_EXCEPTION(scope, encodedJSValue()); auto yViewWithString = y->viewWithUnderlyingString(*state); RETURN_IF_EXCEPTION(scope, encodedJSValue()); scope.release(); return JSValue::encode(collator->compareStrings(*state, xViewWithString.view, yViewWithString.view)); }