blob: 3f91978de34dac08073e2eaa800ceb1e84192a38 [file] [log] [blame]
/* 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);
}