1c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// Copyright 2013 the V8 project authors. All rights reserved. 2c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// Redistribution and use in source and binary forms, with or without 3c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// modification, are permitted provided that the following conditions are 4c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// met: 5c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// 6c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// * Redistributions of source code must retain the above copyright 7c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// notice, this list of conditions and the following disclaimer. 8c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// * Redistributions in binary form must reproduce the above 9c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// copyright notice, this list of conditions and the following 10c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// disclaimer in the documentation and/or other materials provided 11c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// with the distribution. 12c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// * Neither the name of Google Inc. nor the names of its 13c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// contributors may be used to endorse or promote products derived 14c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// from this software without specific prior written permission. 15c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// 16c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// limitations under the License. 28c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 29c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// ECMAScript 402 API implementation is broken into separate files for 30c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// each service. The build system combines them together into one 31c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// Intl namespace. 32c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 33c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 34c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// Save references to Intl objects and methods we use, for added security. 35c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.orgvar savedObjects = { 36c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 'collator': Intl.Collator, 37c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 'numberformat': Intl.NumberFormat, 38c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 'dateformatall': Intl.DateTimeFormat, 39c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 'dateformatdate': Intl.DateTimeFormat, 40c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 'dateformattime': Intl.DateTimeFormat 41c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org}; 42c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 43c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 44c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// Default (created with undefined locales and options parameters) collator, 45c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// number and date format instances. They'll be created as needed. 46c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.orgvar defaultObjects = { 47c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 'collator': undefined, 48c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 'numberformat': undefined, 49c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 'dateformatall': undefined, 50c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 'dateformatdate': undefined, 51c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 'dateformattime': undefined, 52c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org}; 53c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 54c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 55c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org/** 56c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org * Returns cached or newly created instance of a given service. 57c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org * We cache only default instances (where no locales or options are provided). 58c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org */ 59c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.orgfunction cachedOrNewService(service, locales, options, defaults) { 60c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org var useOptions = (defaults === undefined) ? options : defaults; 61c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org if (locales === undefined && options === undefined) { 62c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org if (defaultObjects[service] === undefined) { 63c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org defaultObjects[service] = new savedObjects[service](locales, useOptions); 64c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org } 65c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org return defaultObjects[service]; 66c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org } 67c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org return new savedObjects[service](locales, useOptions); 68c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org} 69c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 70c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 71c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org/** 72c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org * Compares this and that, and returns less than 0, 0 or greater than 0 value. 73c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org * Overrides the built-in method. 74c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org */ 75c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.orgObject.defineProperty(String.prototype, 'localeCompare', { 76c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org value: function(that) { 77c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org if (%_IsConstructCall()) { 78c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR); 79c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org } 80c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 81c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org if (this === undefined || this === null) { 82c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org throw new TypeError('Method invoked on undefined or null value.'); 83c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org } 84c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 85c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org var locales = arguments[1]; 86c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org var options = arguments[2]; 87c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org var collator = cachedOrNewService('collator', locales, options); 88c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org return compare(collator, this, that); 89c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org }, 90c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org writable: true, 91c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org configurable: true, 92c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org enumerable: false 93c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org}); 94c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org%FunctionSetName(String.prototype.localeCompare, 'localeCompare'); 95c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org%FunctionRemovePrototype(String.prototype.localeCompare); 96c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org%SetNativeFlag(String.prototype.localeCompare); 97c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 98c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 99c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org/** 100c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org * Formats a Number object (this) using locale and options values. 101c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org * If locale or options are omitted, defaults are used. 102c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org */ 103c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.orgObject.defineProperty(Number.prototype, 'toLocaleString', { 104c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org value: function() { 105c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org if (%_IsConstructCall()) { 106c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR); 107c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org } 108c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 109c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org if (!(this instanceof Number) && typeof(this) !== 'number') { 110c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org throw new TypeError('Method invoked on an object that is not Number.'); 111c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org } 112c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 113c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org var locales = arguments[0]; 114c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org var options = arguments[1]; 115c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org var numberFormat = cachedOrNewService('numberformat', locales, options); 116c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org return formatNumber(numberFormat, this); 117c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org }, 118c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org writable: true, 119c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org configurable: true, 120c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org enumerable: false 121c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org}); 122c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org%FunctionSetName(Number.prototype.toLocaleString, 'toLocaleString'); 123c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org%FunctionRemovePrototype(Number.prototype.toLocaleString); 124c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org%SetNativeFlag(Number.prototype.toLocaleString); 125c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 126c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 127c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org/** 128c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org * Returns actual formatted date or fails if date parameter is invalid. 129c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org */ 130c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.orgfunction toLocaleDateTime(date, locales, options, required, defaults, service) { 131c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org if (!(date instanceof Date)) { 132c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org throw new TypeError('Method invoked on an object that is not Date.'); 133c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org } 134c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 135c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org if (isNaN(date)) { 136c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org return 'Invalid Date'; 137c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org } 138c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 139c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org var internalOptions = toDateTimeOptions(options, required, defaults); 140c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 141c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org var dateFormat = 142c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org cachedOrNewService(service, locales, options, internalOptions); 143c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 144c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org return formatDate(dateFormat, date); 145c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org} 146c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 147c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 148c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org/** 149c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org * Formats a Date object (this) using locale and options values. 150c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org * If locale or options are omitted, defaults are used - both date and time are 151c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org * present in the output. 152c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org */ 153c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.orgObject.defineProperty(Date.prototype, 'toLocaleString', { 154c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org value: function() { 155c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org if (%_IsConstructCall()) { 156c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR); 157c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org } 158c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 159c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org var locales = arguments[0]; 160c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org var options = arguments[1]; 161c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org return toLocaleDateTime( 162c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org this, locales, options, 'any', 'all', 'dateformatall'); 163c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org }, 164c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org writable: true, 165c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org configurable: true, 166c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org enumerable: false 167c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org}); 168c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org%FunctionSetName(Date.prototype.toLocaleString, 'toLocaleString'); 169c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org%FunctionRemovePrototype(Date.prototype.toLocaleString); 170c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org%SetNativeFlag(Date.prototype.toLocaleString); 171c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 172c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 173c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org/** 174c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org * Formats a Date object (this) using locale and options values. 175c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org * If locale or options are omitted, defaults are used - only date is present 176c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org * in the output. 177c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org */ 178c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.orgObject.defineProperty(Date.prototype, 'toLocaleDateString', { 179c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org value: function() { 180c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org if (%_IsConstructCall()) { 181c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR); 182c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org } 183c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 184c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org var locales = arguments[0]; 185c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org var options = arguments[1]; 186c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org return toLocaleDateTime( 187c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org this, locales, options, 'date', 'date', 'dateformatdate'); 188c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org }, 189c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org writable: true, 190c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org configurable: true, 191c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org enumerable: false 192c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org}); 193c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org%FunctionSetName(Date.prototype.toLocaleDateString, 'toLocaleDateString'); 194c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org%FunctionRemovePrototype(Date.prototype.toLocaleDateString); 195c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org%SetNativeFlag(Date.prototype.toLocaleDateString); 196c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 197c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 198c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org/** 199c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org * Formats a Date object (this) using locale and options values. 200c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org * If locale or options are omitted, defaults are used - only time is present 201c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org * in the output. 202c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org */ 203c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.orgObject.defineProperty(Date.prototype, 'toLocaleTimeString', { 204c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org value: function() { 205c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org if (%_IsConstructCall()) { 206c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR); 207c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org } 208c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org 209c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org var locales = arguments[0]; 210c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org var options = arguments[1]; 211c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org return toLocaleDateTime( 212c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org this, locales, options, 'time', 'time', 'dateformattime'); 213c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org }, 214c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org writable: true, 215c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org configurable: true, 216c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org enumerable: false 217c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org}); 218c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org%FunctionSetName(Date.prototype.toLocaleTimeString, 'toLocaleTimeString'); 219c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org%FunctionRemovePrototype(Date.prototype.toLocaleTimeString); 220c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org%SetNativeFlag(Date.prototype.toLocaleTimeString); 221