| /* This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| |
| /*global intl_Collator: false, */ |
| |
| |
| var collatorCache = new Record(); |
| |
| /* ES6 20121122 draft 15.5.4.21. */ |
| function String_repeat(count) { |
| // Steps 1-3. |
| CheckObjectCoercible(this); |
| var S = ToString(this); |
| |
| // Steps 4-5. |
| var n = ToInteger(count); |
| |
| // Steps 6-7. |
| if (n < 0 || n === std_Number_POSITIVE_INFINITY) |
| ThrowError(JSMSG_REPEAT_RANGE); |
| |
| // Step 8-9. |
| if (n === 0) |
| return ""; |
| |
| var result = S; |
| for (var i = 1; i <= n / 2; i *= 2) |
| result += result; |
| for (; i < n; i++) |
| result += S; |
| return result; |
| } |
| |
| /** |
| * Compare this String against that String, using the locale and collation |
| * options provided. |
| * |
| * Spec: ECMAScript Internationalization API Specification, 13.1.1. |
| */ |
| function String_localeCompare(that) { |
| // Steps 1-3. |
| CheckObjectCoercible(this); |
| var S = ToString(this); |
| var That = ToString(that); |
| |
| // Steps 4-5. |
| var locales = arguments.length > 1 ? arguments[1] : undefined; |
| var options = arguments.length > 2 ? arguments[2] : undefined; |
| |
| // Step 6. |
| var collator; |
| if (locales === undefined && options === undefined) { |
| // This cache only optimizes for the old ES5 localeCompare without |
| // locales and options. |
| if (collatorCache.collator === undefined) |
| collatorCache.collator = intl_Collator(locales, options); |
| collator = collatorCache.collator; |
| } else { |
| collator = intl_Collator(locales, options); |
| } |
| |
| // Step 7. |
| return intl_CompareStrings(collator, S, That); |
| } |
| |
| /** |
| * Compare String str1 against String str2, using the locale and collation |
| * options provided. |
| * |
| * Mozilla proprietary. |
| * Spec: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String#String_generic_methods |
| */ |
| function String_static_localeCompare(str1, str2) { |
| if (arguments.length < 1) |
| ThrowError(JSMSG_MISSING_FUN_ARG, 0, "String.localeCompare"); |
| var locales = arguments.length > 2 ? arguments[2] : undefined; |
| var options = arguments.length > 3 ? arguments[3] : undefined; |
| return callFunction(String_localeCompare, str1, str2, locales, options); |
| } |