| Index: src/js/i18n.js
|
| diff --git a/src/js/i18n.js b/src/js/i18n.js
|
| index eee4c41c26dca8ca889c170052f4ed34eca94899..e9296ba60e0b892f8d8e78a1ac793f288a44deb3 100644
|
| --- a/src/js/i18n.js
|
| +++ b/src/js/i18n.js
|
| @@ -20,6 +20,11 @@
|
| var ArrayJoin;
|
| var ArrayPush;
|
| var GlobalDate = global.Date;
|
| +var GlobalIntl = global.Intl;
|
| +var GlobalIntlDateTimeFormat = GlobalIntl.DateTimeFormat;
|
| +var GlobalIntlNumberFormat = GlobalIntl.NumberFormat;
|
| +var GlobalIntlCollator = GlobalIntl.Collator;
|
| +var GlobalIntlv8BreakIterator = GlobalIntl.v8BreakIterator;
|
| var GlobalNumber = global.Number;
|
| var GlobalRegExp = global.RegExp;
|
| var GlobalString = global.String;
|
| @@ -47,14 +52,6 @@ function InstallFunction(object, name, func) {
|
| }
|
|
|
|
|
| -function InstallConstructor(object, name, func) {
|
| - %CheckIsBootstrapping();
|
| - SetFunctionName(func, name);
|
| - %AddNamedProperty(object, name, func, DONT_ENUM);
|
| - %SetNativeFlag(func);
|
| - %ToFastProperties(object);
|
| -}
|
| -
|
| /**
|
| * Adds bound method to the prototype of the given object.
|
| */
|
| @@ -137,10 +134,6 @@ function Unwrap(receiver, typename, constructor, method, compat) {
|
|
|
| // -------------------------------------------------------------------
|
|
|
| -var Intl = {};
|
| -
|
| -%AddNamedProperty(global, "Intl", Intl, DONT_ENUM);
|
| -
|
| /**
|
| * Caches available locales for each service.
|
| */
|
| @@ -947,7 +940,7 @@ var resolvedAccessor = {
|
| };
|
|
|
| // ECMA 402 section 8.2.1
|
| -InstallFunction(Intl, 'getCanonicalLocales', function(locales) {
|
| +InstallFunction(GlobalIntl, 'getCanonicalLocales', function(locales) {
|
| return makeArray(canonicalizeLocaleList(locales));
|
| }
|
| );
|
| @@ -1065,18 +1058,19 @@ function initializeCollator(collator, locales, options) {
|
| *
|
| * @constructor
|
| */
|
| -function Collator() {
|
| - return IntlConstruct(this, Collator, initializeCollator, new.target,
|
| +function CollatorConstructor() {
|
| + return IntlConstruct(this, GlobalIntlCollator, initializeCollator, new.target,
|
| arguments);
|
| }
|
| -InstallConstructor(Intl, 'Collator', Collator);
|
| +%SetCode(GlobalIntlCollator, CollatorConstructor);
|
|
|
|
|
| /**
|
| * Collator resolvedOptions method.
|
| */
|
| -InstallFunction(Intl.Collator.prototype, 'resolvedOptions', function() {
|
| - var coll = Unwrap(this, 'collator', Collator, 'resolvedOptions', false);
|
| +InstallFunction(GlobalIntlCollator.prototype, 'resolvedOptions', function() {
|
| + var coll = Unwrap(this, 'collator', GlobalIntlCollator, 'resolvedOptions',
|
| + false);
|
| var locale = getOptimalLanguageTag(coll[resolvedSymbol].requestedLocale,
|
| coll[resolvedSymbol].locale);
|
|
|
| @@ -1099,7 +1093,7 @@ InstallFunction(Intl.Collator.prototype, 'resolvedOptions', function() {
|
| * order in the returned list as in the input list.
|
| * Options are optional parameter.
|
| */
|
| -InstallFunction(Intl.Collator, 'supportedLocalesOf', function(locales) {
|
| +InstallFunction(GlobalIntlCollator, 'supportedLocalesOf', function(locales) {
|
| return supportedLocalesOf('collator', locales, arguments[1]);
|
| }
|
| );
|
| @@ -1121,7 +1115,7 @@ function compare(collator, x, y) {
|
| };
|
|
|
|
|
| -AddBoundMethod(Intl.Collator, 'compare', compare, 2, 'collator', false);
|
| +AddBoundMethod(GlobalIntlCollator, 'compare', compare, 2, 'collator', false);
|
|
|
| /**
|
| * Verifies that the input is a well-formed ISO 4217 currency code.
|
| @@ -1287,18 +1281,19 @@ function initializeNumberFormat(numberFormat, locales, options) {
|
| *
|
| * @constructor
|
| */
|
| -function NumberFormat() {
|
| - return IntlConstruct(this, NumberFormat, initializeNumberFormat, new.target,
|
| - arguments, true);
|
| +function NumberFormatConstructor() {
|
| + return IntlConstruct(this, GlobalIntlNumberFormat, initializeNumberFormat,
|
| + new.target, arguments, true);
|
| }
|
| -InstallConstructor(Intl, 'NumberFormat', NumberFormat);
|
| +%SetCode(GlobalIntlNumberFormat, NumberFormatConstructor);
|
|
|
|
|
| /**
|
| * NumberFormat resolvedOptions method.
|
| */
|
| -InstallFunction(Intl.NumberFormat.prototype, 'resolvedOptions', function() {
|
| - var format = Unwrap(this, 'numberformat', NumberFormat,
|
| +InstallFunction(GlobalIntlNumberFormat.prototype, 'resolvedOptions',
|
| + function() {
|
| + var format = Unwrap(this, 'numberformat', GlobalIntlNumberFormat,
|
| 'resolvedOptions', true);
|
| var locale = getOptimalLanguageTag(format[resolvedSymbol].requestedLocale,
|
| format[resolvedSymbol].locale);
|
| @@ -1340,7 +1335,8 @@ InstallFunction(Intl.NumberFormat.prototype, 'resolvedOptions', function() {
|
| * order in the returned list as in the input list.
|
| * Options are optional parameter.
|
| */
|
| -InstallFunction(Intl.NumberFormat, 'supportedLocalesOf', function(locales) {
|
| +InstallFunction(GlobalIntlNumberFormat, 'supportedLocalesOf',
|
| + function(locales) {
|
| return supportedLocalesOf('numberformat', locales, arguments[1]);
|
| }
|
| );
|
| @@ -1360,7 +1356,8 @@ function formatNumber(formatter, value) {
|
| }
|
|
|
|
|
| -AddBoundMethod(Intl.NumberFormat, 'format', formatNumber, 1, 'numberformat', true);
|
| +AddBoundMethod(GlobalIntlNumberFormat, 'format', formatNumber, 1,
|
| + 'numberformat', true);
|
|
|
| /**
|
| * Returns a string that matches LDML representation of the options object.
|
| @@ -1653,18 +1650,19 @@ function initializeDateTimeFormat(dateFormat, locales, options) {
|
| *
|
| * @constructor
|
| */
|
| -function DateTimeFormat() {
|
| - return IntlConstruct(this, DateTimeFormat, initializeDateTimeFormat,
|
| +function DateTimeFormatConstructor() {
|
| + return IntlConstruct(this, GlobalIntlDateTimeFormat, initializeDateTimeFormat,
|
| new.target, arguments, true);
|
| }
|
| -InstallConstructor(Intl, 'DateTimeFormat', DateTimeFormat);
|
| +%SetCode(GlobalIntlDateTimeFormat, DateTimeFormatConstructor);
|
|
|
|
|
| /**
|
| * DateTimeFormat resolvedOptions method.
|
| */
|
| -InstallFunction(Intl.DateTimeFormat.prototype, 'resolvedOptions', function() {
|
| - var format = Unwrap(this, 'dateformat', DateTimeFormat,
|
| +InstallFunction(GlobalIntlDateTimeFormat.prototype, 'resolvedOptions',
|
| + function() {
|
| + var format = Unwrap(this, 'dateformat', GlobalIntlDateTimeFormat,
|
| 'resolvedOptions', true);
|
|
|
| /**
|
| @@ -1717,7 +1715,8 @@ InstallFunction(Intl.DateTimeFormat.prototype, 'resolvedOptions', function() {
|
| * order in the returned list as in the input list.
|
| * Options are optional parameter.
|
| */
|
| -InstallFunction(Intl.DateTimeFormat, 'supportedLocalesOf', function(locales) {
|
| +InstallFunction(GlobalIntlDateTimeFormat, 'supportedLocalesOf',
|
| + function(locales) {
|
| return supportedLocalesOf('dateformat', locales, arguments[1]);
|
| }
|
| );
|
| @@ -1764,7 +1763,8 @@ function FormatDateToParts(dateValue) {
|
|
|
|
|
| // 0 because date is optional argument.
|
| -AddBoundMethod(Intl.DateTimeFormat, 'format', formatDate, 0, 'dateformat', true);
|
| +AddBoundMethod(GlobalIntlDateTimeFormat, 'format', formatDate, 0, 'dateformat',
|
| + true);
|
|
|
|
|
| /**
|
| @@ -1853,23 +1853,23 @@ function initializeBreakIterator(iterator, locales, options) {
|
| *
|
| * @constructor
|
| */
|
| -function v8BreakIterator() {
|
| - return IntlConstruct(this, v8BreakIterator, initializeBreakIterator,
|
| +function v8BreakIteratorConstructor() {
|
| + return IntlConstruct(this, GlobalIntlv8BreakIterator, initializeBreakIterator,
|
| new.target, arguments);
|
| }
|
| -InstallConstructor(Intl, 'v8BreakIterator', v8BreakIterator);
|
| +%SetCode(GlobalIntlv8BreakIterator, v8BreakIteratorConstructor);
|
|
|
|
|
| /**
|
| * BreakIterator resolvedOptions method.
|
| */
|
| -InstallFunction(Intl.v8BreakIterator.prototype, 'resolvedOptions',
|
| +InstallFunction(GlobalIntlv8BreakIterator.prototype, 'resolvedOptions',
|
| function() {
|
| if (!IS_UNDEFINED(new.target)) {
|
| throw %make_type_error(kOrdinaryFunctionCalledAsConstructor);
|
| }
|
|
|
| - var segmenter = Unwrap(this, 'breakiterator', v8BreakIterator,
|
| + var segmenter = Unwrap(this, 'breakiterator', GlobalIntlv8BreakIterator,
|
| 'resolvedOptions', false);
|
|
|
| var locale =
|
| @@ -1890,7 +1890,7 @@ InstallFunction(Intl.v8BreakIterator.prototype, 'resolvedOptions',
|
| * order in the returned list as in the input list.
|
| * Options are optional parameter.
|
| */
|
| -InstallFunction(Intl.v8BreakIterator, 'supportedLocalesOf',
|
| +InstallFunction(GlobalIntlv8BreakIterator, 'supportedLocalesOf',
|
| function(locales) {
|
| if (!IS_UNDEFINED(new.target)) {
|
| throw %make_type_error(kOrdinaryFunctionCalledAsConstructor);
|
| @@ -1943,21 +1943,22 @@ function breakType(iterator) {
|
| }
|
|
|
|
|
| -AddBoundMethod(Intl.v8BreakIterator, 'adoptText', adoptText, 1,
|
| +AddBoundMethod(GlobalIntlv8BreakIterator, 'adoptText', adoptText, 1,
|
| + 'breakiterator');
|
| +AddBoundMethod(GlobalIntlv8BreakIterator, 'first', first, 0, 'breakiterator');
|
| +AddBoundMethod(GlobalIntlv8BreakIterator, 'next', next, 0, 'breakiterator');
|
| +AddBoundMethod(GlobalIntlv8BreakIterator, 'current', current, 0,
|
| 'breakiterator');
|
| -AddBoundMethod(Intl.v8BreakIterator, 'first', first, 0, 'breakiterator');
|
| -AddBoundMethod(Intl.v8BreakIterator, 'next', next, 0, 'breakiterator');
|
| -AddBoundMethod(Intl.v8BreakIterator, 'current', current, 0, 'breakiterator');
|
| -AddBoundMethod(Intl.v8BreakIterator, 'breakType', breakType, 0,
|
| +AddBoundMethod(GlobalIntlv8BreakIterator, 'breakType', breakType, 0,
|
| 'breakiterator');
|
|
|
| // Save references to Intl objects and methods we use, for added security.
|
| var savedObjects = {
|
| - 'collator': Intl.Collator,
|
| - 'numberformat': Intl.NumberFormat,
|
| - 'dateformatall': Intl.DateTimeFormat,
|
| - 'dateformatdate': Intl.DateTimeFormat,
|
| - 'dateformattime': Intl.DateTimeFormat
|
| + 'collator': GlobalIntlCollator,
|
| + 'numberformat': GlobalIntlNumberFormat,
|
| + 'dateformatall': GlobalIntlDateTimeFormat,
|
| + 'dateformatdate': GlobalIntlDateTimeFormat,
|
| + 'dateformattime': GlobalIntlDateTimeFormat
|
| };
|
|
|
|
|
|
|