Index: src/i18n.js |
diff --git a/src/i18n.js b/src/i18n.js |
index 61e0ac98e5b757f95c95cff72691bd10ee9a3325..47f83efe3b4daf26394d05c4981d9da439fc3312 100644 |
--- a/src/i18n.js |
+++ b/src/i18n.js |
@@ -2,20 +2,26 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-"use strict"; |
- |
// ECMAScript 402 API implementation. |
/** |
* Intl object is a single object that has some named properties, |
* all of which are constructors. |
*/ |
-$Object.defineProperty(global, "Intl", { enumerable: false, value: (function() { |
+(function() { |
-var Intl = {}; |
+"use strict"; |
+ |
+%CheckIsBootstrapping(); |
+ |
+var GlobalDate = global.Date; |
var undefined = global.undefined; |
Jakob Kummerow
2015/03/11 15:46:55
How about just dropping this? Shouldn't make a dif
|
+var Intl = {}; |
+ |
+%AddNamedProperty(global, "Intl", Intl, DONT_ENUM); |
+ |
var AVAILABLE_SERVICES = ['collator', |
'numberformat', |
'dateformat', |
@@ -1658,7 +1664,7 @@ function initializeDateTimeFormat(dateFormat, locales, options) { |
function formatDate(formatter, dateValue) { |
var dateMs; |
if (dateValue === undefined) { |
- dateMs = $Date.now(); |
+ dateMs = GlobalDate.now(); |
} else { |
dateMs = $Number(dateValue); |
} |
@@ -1668,7 +1674,7 @@ function formatDate(formatter, dateValue) { |
} |
return %InternalDateFormat(%GetImplFromInitializedIntlObject(formatter), |
- new $Date(dateMs)); |
+ new GlobalDate(dateMs)); |
} |
@@ -1924,8 +1930,7 @@ function cachedOrNewService(service, locales, options, defaults) { |
* Compares this and that, and returns less than 0, 0 or greater than 0 value. |
* Overrides the built-in method. |
*/ |
-ObjectDefineProperty($String.prototype, 'localeCompare', { |
- value: function(that) { |
+OverrideFunction($String.prototype, 'localeCompare', function(that) { |
if (%_IsConstructCall()) { |
throw new $TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR); |
} |
@@ -1938,14 +1943,8 @@ ObjectDefineProperty($String.prototype, 'localeCompare', { |
var options = %_Arguments(2); |
var collator = cachedOrNewService('collator', locales, options); |
return compare(collator, this, that); |
- }, |
- writable: true, |
- configurable: true, |
- enumerable: false |
-}); |
-%FunctionSetName($String.prototype.localeCompare, 'localeCompare'); |
-%FunctionRemovePrototype($String.prototype.localeCompare); |
-%SetNativeFlag($String.prototype.localeCompare); |
+ } |
+); |
/** |
@@ -1955,8 +1954,7 @@ ObjectDefineProperty($String.prototype, 'localeCompare', { |
* If the form is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw |
* a RangeError Exception. |
*/ |
-ObjectDefineProperty($String.prototype, 'normalize', { |
- value: function(that) { |
+OverrideFunction($String.prototype, 'normalize', function(that) { |
if (%_IsConstructCall()) { |
throw new $TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR); |
} |
@@ -1972,22 +1970,15 @@ ObjectDefineProperty($String.prototype, 'normalize', { |
} |
return %StringNormalize(this, normalizationForm); |
- }, |
- writable: true, |
- configurable: true, |
- enumerable: false |
-}); |
-%FunctionSetName($String.prototype.normalize, 'normalize'); |
-%FunctionRemovePrototype($String.prototype.normalize); |
-%SetNativeFlag($String.prototype.normalize); |
+ } |
+); |
/** |
* Formats a Number object (this) using locale and options values. |
* If locale or options are omitted, defaults are used. |
*/ |
-ObjectDefineProperty($Number.prototype, 'toLocaleString', { |
- value: function() { |
+OverrideFunction($Number.prototype, 'toLocaleString', function() { |
if (%_IsConstructCall()) { |
throw new $TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR); |
} |
@@ -2000,21 +1991,15 @@ ObjectDefineProperty($Number.prototype, 'toLocaleString', { |
var options = %_Arguments(1); |
var numberFormat = cachedOrNewService('numberformat', locales, options); |
return formatNumber(numberFormat, this); |
- }, |
- writable: true, |
- configurable: true, |
- enumerable: false |
-}); |
-%FunctionSetName($Number.prototype.toLocaleString, 'toLocaleString'); |
-%FunctionRemovePrototype($Number.prototype.toLocaleString); |
-%SetNativeFlag($Number.prototype.toLocaleString); |
+ } |
+); |
/** |
* Returns actual formatted date or fails if date parameter is invalid. |
*/ |
function toLocaleDateTime(date, locales, options, required, defaults, service) { |
- if (!(date instanceof $Date)) { |
+ if (!(date instanceof GlobalDate)) { |
throw new $TypeError('Method invoked on an object that is not Date.'); |
} |
@@ -2036,8 +2021,7 @@ function toLocaleDateTime(date, locales, options, required, defaults, service) { |
* If locale or options are omitted, defaults are used - both date and time are |
* present in the output. |
*/ |
-ObjectDefineProperty($Date.prototype, 'toLocaleString', { |
- value: function() { |
+OverrideFunction(GlobalDate.prototype, 'toLocaleString', function() { |
if (%_IsConstructCall()) { |
throw new $TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR); |
} |
@@ -2046,14 +2030,8 @@ ObjectDefineProperty($Date.prototype, 'toLocaleString', { |
var options = %_Arguments(1); |
return toLocaleDateTime( |
this, locales, options, 'any', 'all', 'dateformatall'); |
- }, |
- writable: true, |
- configurable: true, |
- enumerable: false |
-}); |
-%FunctionSetName($Date.prototype.toLocaleString, 'toLocaleString'); |
-%FunctionRemovePrototype($Date.prototype.toLocaleString); |
-%SetNativeFlag($Date.prototype.toLocaleString); |
+ } |
+); |
/** |
@@ -2061,8 +2039,7 @@ ObjectDefineProperty($Date.prototype, 'toLocaleString', { |
* If locale or options are omitted, defaults are used - only date is present |
* in the output. |
*/ |
-ObjectDefineProperty($Date.prototype, 'toLocaleDateString', { |
- value: function() { |
+OverrideFunction(GlobalDate.prototype, 'toLocaleDateString', function() { |
if (%_IsConstructCall()) { |
throw new $TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR); |
} |
@@ -2071,14 +2048,8 @@ ObjectDefineProperty($Date.prototype, 'toLocaleDateString', { |
var options = %_Arguments(1); |
return toLocaleDateTime( |
this, locales, options, 'date', 'date', 'dateformatdate'); |
- }, |
- writable: true, |
- configurable: true, |
- enumerable: false |
-}); |
-%FunctionSetName($Date.prototype.toLocaleDateString, 'toLocaleDateString'); |
-%FunctionRemovePrototype($Date.prototype.toLocaleDateString); |
-%SetNativeFlag($Date.prototype.toLocaleDateString); |
+ } |
+); |
/** |
@@ -2086,8 +2057,7 @@ ObjectDefineProperty($Date.prototype, 'toLocaleDateString', { |
* If locale or options are omitted, defaults are used - only time is present |
* in the output. |
*/ |
-ObjectDefineProperty($Date.prototype, 'toLocaleTimeString', { |
- value: function() { |
+OverrideFunction(GlobalDate.prototype, 'toLocaleTimeString', function() { |
if (%_IsConstructCall()) { |
throw new $TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR); |
} |
@@ -2096,14 +2066,7 @@ ObjectDefineProperty($Date.prototype, 'toLocaleTimeString', { |
var options = %_Arguments(1); |
return toLocaleDateTime( |
this, locales, options, 'time', 'time', 'dateformattime'); |
- }, |
- writable: true, |
- configurable: true, |
- enumerable: false |
-}); |
-%FunctionSetName($Date.prototype.toLocaleTimeString, 'toLocaleTimeString'); |
-%FunctionRemovePrototype($Date.prototype.toLocaleTimeString); |
-%SetNativeFlag($Date.prototype.toLocaleTimeString); |
- |
-return Intl; |
-}())}); |
+ } |
+); |
+ |
+})(); |