| Index: src/js/i18n.js
|
| diff --git a/src/js/i18n.js b/src/js/i18n.js
|
| index feb017aae9e5d82cc232c0de8777d7a1e8dedd5d..3be9ed385a0b8e16c7ddae9878c38c2822fb8db3 100644
|
| --- a/src/js/i18n.js
|
| +++ b/src/js/i18n.js
|
| @@ -32,6 +32,7 @@ var IntlFallbackSymbol = utils.ImportNow("intl_fallback_symbol");
|
| var InstallFunctions = utils.InstallFunctions;
|
| var InstallGetter = utils.InstallGetter;
|
| var InternalArray = utils.InternalArray;
|
| +var MaxSimple;
|
| var ObjectHasOwnProperty = utils.ImportNow("ObjectHasOwnProperty");
|
| var OverrideFunction = utils.OverrideFunction;
|
| var patternSymbol = utils.ImportNow("intl_pattern_symbol");
|
| @@ -43,6 +44,7 @@ var StringSubstring = GlobalString.prototype.substring;
|
| utils.Import(function(from) {
|
| ArrayJoin = from.ArrayJoin;
|
| ArrayPush = from.ArrayPush;
|
| + MaxSimple = from.MaxSimple;
|
| });
|
|
|
| // Utilities for definitions
|
| @@ -934,16 +936,6 @@ function BuildLanguageTagREs() {
|
| LANGUAGE_TAG_RE = new GlobalRegExp(languageTag, 'i');
|
| }
|
|
|
| -var resolvedAccessor = {
|
| - get() {
|
| - %IncrementUseCounter(kIntlResolved);
|
| - return this[resolvedSymbol];
|
| - },
|
| - set(value) {
|
| - this[resolvedSymbol] = value;
|
| - }
|
| -};
|
| -
|
| // ECMA 402 section 8.2.1
|
| InstallFunction(GlobalIntl, 'getCanonicalLocales', function(locales) {
|
| return makeArray(canonicalizeLocaleList(locales));
|
| @@ -1142,15 +1134,35 @@ function getNumberOption(options, property, min, max, fallback) {
|
| return fallback;
|
| }
|
|
|
| -var patternAccessor = {
|
| - get() {
|
| - %IncrementUseCounter(kIntlPattern);
|
| - return this[patternSymbol];
|
| - },
|
| - set(value) {
|
| - this[patternSymbol] = value;
|
| +// ECMA 402 #sec-setnfdigitoptions
|
| +// SetNumberFormatDigitOptions ( intlObj, options, mnfdDefault, mxfdDefault )
|
| +function SetNumberFormatDigitOptions(internalOptions, options,
|
| + mnfdDefault, mxfdDefault) {
|
| + // Digit ranges.
|
| + var mnid = getNumberOption(options, 'minimumIntegerDigits', 1, 21, 1);
|
| + defineWEProperty(internalOptions, 'minimumIntegerDigits', mnid);
|
| +
|
| + var mnfd = getNumberOption(options, 'minimumFractionDigits', 0, 20,
|
| + mnfdDefault);
|
| + defineWEProperty(internalOptions, 'minimumFractionDigits', mnfd);
|
| +
|
| + var mxfdActualDefault = MaxSimple(mnfd, mxfdDefault);
|
| +
|
| + var mxfd = getNumberOption(options, 'maximumFractionDigits', mnfd, 20,
|
| + mxfdActualDefault);
|
| +
|
| + defineWEProperty(internalOptions, 'maximumFractionDigits', mxfd);
|
| +
|
| + var mnsd = options['minimumSignificantDigits'];
|
| + var mxsd = options['maximumSignificantDigits'];
|
| + if (!IS_UNDEFINED(mnsd) || !IS_UNDEFINED(mxsd)) {
|
| + mnsd = getNumberOption(options, 'minimumSignificantDigits', 1, 21, 1);
|
| + defineWEProperty(internalOptions, 'minimumSignificantDigits', mnsd);
|
| +
|
| + mxsd = getNumberOption(options, 'maximumSignificantDigits', mnsd, 21, 21);
|
| + defineWEProperty(internalOptions, 'maximumSignificantDigits', mxsd);
|
| }
|
| -};
|
| +}
|
|
|
| /**
|
| * Initializes the given object so it's a valid NumberFormat instance.
|
| @@ -1178,41 +1190,22 @@ function CreateNumberFormat(locales, options) {
|
| throw %make_type_error(kCurrencyCode);
|
| }
|
|
|
| + var mnfdDefault, mxfdDefault;
|
| +
|
| var currencyDisplay = getOption(
|
| 'currencyDisplay', 'string', ['code', 'symbol', 'name'], 'symbol');
|
| if (internalOptions.style === 'currency') {
|
| defineWEProperty(internalOptions, 'currency', %StringToUpperCaseI18N(currency));
|
| defineWEProperty(internalOptions, 'currencyDisplay', currencyDisplay);
|
| - }
|
| -
|
| - // Digit ranges.
|
| - var mnid = getNumberOption(options, 'minimumIntegerDigits', 1, 21, 1);
|
| - defineWEProperty(internalOptions, 'minimumIntegerDigits', mnid);
|
|
|
| - var mnfd = options['minimumFractionDigits'];
|
| - var mxfd = options['maximumFractionDigits'];
|
| - if (!IS_UNDEFINED(mnfd) || internalOptions.style !== 'currency') {
|
| - mnfd = getNumberOption(options, 'minimumFractionDigits', 0, 20, 0);
|
| - defineWEProperty(internalOptions, 'minimumFractionDigits', mnfd);
|
| - }
|
| -
|
| - if (!IS_UNDEFINED(mxfd) || internalOptions.style !== 'currency') {
|
| - var min_mxfd = internalOptions.style === 'percent' ? 0 : 3;
|
| - mnfd = IS_UNDEFINED(mnfd) ? 0 : mnfd;
|
| - var fallback_limit = (mnfd > min_mxfd) ? mnfd : min_mxfd;
|
| - mxfd = getNumberOption(options, 'maximumFractionDigits', mnfd, 20, fallback_limit);
|
| - defineWEProperty(internalOptions, 'maximumFractionDigits', mxfd);
|
| + mnfdDefault = mxfdDefault = %CurrencyDigits(internalOptions.currency);
|
| + } else {
|
| + mnfdDefault = 0;
|
| + mxfdDefault = internalOptions.style === 'percent' ? 0 : 3;
|
| }
|
|
|
| - var mnsd = options['minimumSignificantDigits'];
|
| - var mxsd = options['maximumSignificantDigits'];
|
| - if (!IS_UNDEFINED(mnsd) || !IS_UNDEFINED(mxsd)) {
|
| - mnsd = getNumberOption(options, 'minimumSignificantDigits', 1, 21, 1);
|
| - defineWEProperty(internalOptions, 'minimumSignificantDigits', mnsd);
|
| -
|
| - mxsd = getNumberOption(options, 'maximumSignificantDigits', mnsd, 21, 21);
|
| - defineWEProperty(internalOptions, 'maximumSignificantDigits', mxsd);
|
| - }
|
| + SetNumberFormatDigitOptions(internalOptions, options, mnfdDefault,
|
| + mxfdDefault);
|
|
|
| // Grouping.
|
| defineWEProperty(internalOptions, 'useGrouping', getOption(
|
|
|