Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(286)

Side by Side Diff: src/js/i18n.js

Issue 1968893002: Remove certain non-standard properties from Intl (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add missing file Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // ECMAScript 402 API implementation. 5 // ECMAScript 402 API implementation.
6 6
7 /** 7 /**
8 * Intl object is a single object that has some named properties, 8 * Intl object is a single object that has some named properties,
9 * all of which are constructors. 9 * all of which are constructors.
10 */ 10 */
11 (function(global, utils) { 11 (function(global, utils) {
12 12
13 "use strict"; 13 "use strict";
14 14
15 %CheckIsBootstrapping(); 15 %CheckIsBootstrapping();
16 16
17 // ------------------------------------------------------------------- 17 // -------------------------------------------------------------------
18 // Imports 18 // Imports
19 19
20 var ArrayIndexOf; 20 var ArrayIndexOf;
21 var ArrayJoin; 21 var ArrayJoin;
22 var ArrayPush; 22 var ArrayPush;
23 var FLAG_intl_extra;
23 var GlobalBoolean = global.Boolean; 24 var GlobalBoolean = global.Boolean;
24 var GlobalDate = global.Date; 25 var GlobalDate = global.Date;
25 var GlobalNumber = global.Number; 26 var GlobalNumber = global.Number;
26 var GlobalRegExp = global.RegExp; 27 var GlobalRegExp = global.RegExp;
27 var GlobalString = global.String; 28 var GlobalString = global.String;
28 var InstallFunctions = utils.InstallFunctions; 29 var InstallFunctions = utils.InstallFunctions;
29 var InstallGetter = utils.InstallGetter; 30 var InstallGetter = utils.InstallGetter;
30 var InternalArray = utils.InternalArray; 31 var InternalArray = utils.InternalArray;
31 var InternalRegExpMatch; 32 var InternalRegExpMatch;
32 var InternalRegExpReplace 33 var InternalRegExpReplace
(...skipping 24 matching lines...) Expand all
57 MakeTypeError = from.MakeTypeError; 58 MakeTypeError = from.MakeTypeError;
58 InternalRegExpMatch = from.InternalRegExpMatch; 59 InternalRegExpMatch = from.InternalRegExpMatch;
59 InternalRegExpReplace = from.InternalRegExpReplace; 60 InternalRegExpReplace = from.InternalRegExpReplace;
60 StringIndexOf = from.StringIndexOf; 61 StringIndexOf = from.StringIndexOf;
61 StringLastIndexOf = from.StringLastIndexOf; 62 StringLastIndexOf = from.StringLastIndexOf;
62 StringSplit = from.StringSplit; 63 StringSplit = from.StringSplit;
63 StringSubstr = from.StringSubstr; 64 StringSubstr = from.StringSubstr;
64 StringSubstring = from.StringSubstring; 65 StringSubstring = from.StringSubstring;
65 }); 66 });
66 67
68 utils.ImportFromExperimental(function(from) {
69 FLAG_intl_extra = from.FLAG_intl_extra;
70 });
71
67 // Utilities for definitions 72 // Utilities for definitions
68 73
69 function InstallFunction(object, name, func) { 74 function InstallFunction(object, name, func) {
70 InstallFunctions(object, DONT_ENUM, [name, func]); 75 InstallFunctions(object, DONT_ENUM, [name, func]);
71 } 76 }
72 77
73 78
74 function InstallConstructor(object, name, func) { 79 function InstallConstructor(object, name, func) {
75 %CheckIsBootstrapping(); 80 %CheckIsBootstrapping();
76 SetFunctionName(func, name); 81 SetFunctionName(func, name);
(...skipping 898 matching lines...) Expand 10 before | Expand all | Expand 10 after
975 usage: {value: internalOptions.usage, writable: true} 980 usage: {value: internalOptions.usage, writable: true}
976 }); 981 });
977 982
978 var internalCollator = %CreateCollator(requestedLocale, 983 var internalCollator = %CreateCollator(requestedLocale,
979 internalOptions, 984 internalOptions,
980 resolved); 985 resolved);
981 986
982 // Writable, configurable and enumerable are set to false by default. 987 // Writable, configurable and enumerable are set to false by default.
983 %MarkAsInitializedIntlObjectOfType(collator, 'collator', internalCollator); 988 %MarkAsInitializedIntlObjectOfType(collator, 'collator', internalCollator);
984 collator[resolvedSymbol] = resolved; 989 collator[resolvedSymbol] = resolved;
985 %object_define_property(collator, 'resolved', resolvedAccessor); 990 if (FLAG_intl_extra) {
991 %object_define_property(collator, 'resolved', resolvedAccessor);
992 }
986 993
987 return collator; 994 return collator;
988 } 995 }
989 996
990 997
991 /** 998 /**
992 * Constructs Intl.Collator object given optional locales and options 999 * Constructs Intl.Collator object given optional locales and options
993 * parameters. 1000 * parameters.
994 * 1001 *
995 * @constructor 1002 * @constructor
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
1196 1203
1197 var requestedLocale = locale.locale + extension; 1204 var requestedLocale = locale.locale + extension;
1198 var resolved = %object_define_properties({}, { 1205 var resolved = %object_define_properties({}, {
1199 currency: {writable: true}, 1206 currency: {writable: true},
1200 currencyDisplay: {writable: true}, 1207 currencyDisplay: {writable: true},
1201 locale: {writable: true}, 1208 locale: {writable: true},
1202 maximumFractionDigits: {writable: true}, 1209 maximumFractionDigits: {writable: true},
1203 minimumFractionDigits: {writable: true}, 1210 minimumFractionDigits: {writable: true},
1204 minimumIntegerDigits: {writable: true}, 1211 minimumIntegerDigits: {writable: true},
1205 numberingSystem: {writable: true}, 1212 numberingSystem: {writable: true},
1206 pattern: patternAccessor,
1207 requestedLocale: {value: requestedLocale, writable: true}, 1213 requestedLocale: {value: requestedLocale, writable: true},
1208 style: {value: internalOptions.style, writable: true}, 1214 style: {value: internalOptions.style, writable: true},
1209 useGrouping: {writable: true} 1215 useGrouping: {writable: true}
1210 }); 1216 });
1211 if (HAS_OWN_PROPERTY(internalOptions, 'minimumSignificantDigits')) { 1217 if (HAS_OWN_PROPERTY(internalOptions, 'minimumSignificantDigits')) {
1212 defineWEProperty(resolved, 'minimumSignificantDigits', UNDEFINED); 1218 defineWEProperty(resolved, 'minimumSignificantDigits', UNDEFINED);
1213 } 1219 }
1214 if (HAS_OWN_PROPERTY(internalOptions, 'maximumSignificantDigits')) { 1220 if (HAS_OWN_PROPERTY(internalOptions, 'maximumSignificantDigits')) {
1215 defineWEProperty(resolved, 'maximumSignificantDigits', UNDEFINED); 1221 defineWEProperty(resolved, 'maximumSignificantDigits', UNDEFINED);
1216 } 1222 }
1217 var formatter = %CreateNumberFormat(requestedLocale, 1223 var formatter = %CreateNumberFormat(requestedLocale,
1218 internalOptions, 1224 internalOptions,
1219 resolved); 1225 resolved);
1220 1226
1221 if (internalOptions.style === 'currency') { 1227 if (internalOptions.style === 'currency') {
1222 %object_define_property(resolved, 'currencyDisplay', 1228 %object_define_property(resolved, 'currencyDisplay',
1223 {value: currencyDisplay, writable: true}); 1229 {value: currencyDisplay, writable: true});
1224 } 1230 }
1225 1231
1226 %MarkAsInitializedIntlObjectOfType(numberFormat, 'numberformat', formatter); 1232 %MarkAsInitializedIntlObjectOfType(numberFormat, 'numberformat', formatter);
1227 numberFormat[resolvedSymbol] = resolved; 1233 numberFormat[resolvedSymbol] = resolved;
1228 %object_define_property(numberFormat, 'resolved', resolvedAccessor); 1234 if (FLAG_intl_extra) {
1235 %object_define_property(resolved, 'pattern', patternAccessor);
1236 %object_define_property(numberFormat, 'resolved', resolvedAccessor);
1237 }
1229 1238
1230 return numberFormat; 1239 return numberFormat;
1231 } 1240 }
1232 1241
1233 1242
1234 /** 1243 /**
1235 * Constructs Intl.NumberFormat object given optional locales and options 1244 * Constructs Intl.NumberFormat object given optional locales and options
1236 * parameters. 1245 * parameters.
1237 * 1246 *
1238 * @constructor 1247 * @constructor
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1324 var number = TO_NUMBER(value) + 0; 1333 var number = TO_NUMBER(value) + 0;
1325 1334
1326 return %InternalNumberFormat(%GetImplFromInitializedIntlObject(formatter), 1335 return %InternalNumberFormat(%GetImplFromInitializedIntlObject(formatter),
1327 number); 1336 number);
1328 } 1337 }
1329 1338
1330 1339
1331 /** 1340 /**
1332 * Returns a Number that represents string value that was passed in. 1341 * Returns a Number that represents string value that was passed in.
1333 */ 1342 */
1334 function parseNumber(formatter, value) { 1343 function IntlParseNumber(formatter, value) {
1335 return %InternalNumberParse(%GetImplFromInitializedIntlObject(formatter), 1344 return %InternalNumberParse(%GetImplFromInitializedIntlObject(formatter),
1336 GlobalString(value)); 1345 GlobalString(value));
1337 } 1346 }
1338 1347
1339
1340 AddBoundMethod(Intl.NumberFormat, 'format', formatNumber, 1); 1348 AddBoundMethod(Intl.NumberFormat, 'format', formatNumber, 1);
1341 AddBoundMethod(Intl.NumberFormat, 'v8Parse', parseNumber, 1);
1342 1349
1343 /** 1350 /**
1344 * Returns a string that matches LDML representation of the options object. 1351 * Returns a string that matches LDML representation of the options object.
1345 */ 1352 */
1346 function toLDMLString(options) { 1353 function toLDMLString(options) {
1347 var getOption = getGetOption(options, 'dateformat'); 1354 var getOption = getGetOption(options, 'dateformat');
1348 1355
1349 var ldmlString = ''; 1356 var ldmlString = '';
1350 1357
1351 var option = getOption('weekday', 'string', ['narrow', 'short', 'long']); 1358 var option = getOption('weekday', 'string', ['narrow', 'short', 'long']);
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
1593 calendar: {writable: true}, 1600 calendar: {writable: true},
1594 day: {writable: true}, 1601 day: {writable: true},
1595 era: {writable: true}, 1602 era: {writable: true},
1596 hour12: {writable: true}, 1603 hour12: {writable: true},
1597 hour: {writable: true}, 1604 hour: {writable: true},
1598 locale: {writable: true}, 1605 locale: {writable: true},
1599 minute: {writable: true}, 1606 minute: {writable: true},
1600 month: {writable: true}, 1607 month: {writable: true},
1601 numberingSystem: {writable: true}, 1608 numberingSystem: {writable: true},
1602 [patternSymbol]: {writable: true}, 1609 [patternSymbol]: {writable: true},
1603 pattern: patternAccessor,
1604 requestedLocale: {value: requestedLocale, writable: true}, 1610 requestedLocale: {value: requestedLocale, writable: true},
1605 second: {writable: true}, 1611 second: {writable: true},
1606 timeZone: {writable: true}, 1612 timeZone: {writable: true},
1607 timeZoneName: {writable: true}, 1613 timeZoneName: {writable: true},
1608 tz: {value: tz, writable: true}, 1614 tz: {value: tz, writable: true},
1609 weekday: {writable: true}, 1615 weekday: {writable: true},
1610 year: {writable: true} 1616 year: {writable: true}
1611 }); 1617 });
1612 1618
1613 var formatter = %CreateDateTimeFormat( 1619 var formatter = %CreateDateTimeFormat(
1614 requestedLocale, {skeleton: ldmlString, timeZone: tz}, resolved); 1620 requestedLocale, {skeleton: ldmlString, timeZone: tz}, resolved);
1615 1621
1616 if (resolved.timeZone === "Etc/Unknown") { 1622 if (resolved.timeZone === "Etc/Unknown") {
1617 throw MakeRangeError(kUnsupportedTimeZone, tz); 1623 throw MakeRangeError(kUnsupportedTimeZone, tz);
1618 } 1624 }
1619 1625
1620 %MarkAsInitializedIntlObjectOfType(dateFormat, 'dateformat', formatter); 1626 %MarkAsInitializedIntlObjectOfType(dateFormat, 'dateformat', formatter);
1621 dateFormat[resolvedSymbol] = resolved; 1627 dateFormat[resolvedSymbol] = resolved;
1622 %object_define_property(dateFormat, 'resolved', resolvedAccessor); 1628 if (FLAG_intl_extra) {
1629 %object_define_property(resolved, 'pattern', patternAccessor);
1630 %object_define_property(dateFormat, 'resolved', resolvedAccessor);
1631 }
1623 1632
1624 return dateFormat; 1633 return dateFormat;
1625 } 1634 }
1626 1635
1627 1636
1628 /** 1637 /**
1629 * Constructs Intl.DateTimeFormat object given optional locales and options 1638 * Constructs Intl.DateTimeFormat object given optional locales and options
1630 * parameters. 1639 * parameters.
1631 * 1640 *
1632 * @constructor 1641 * @constructor
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
1746 new GlobalDate(dateMs)); 1755 new GlobalDate(dateMs));
1747 } 1756 }
1748 1757
1749 1758
1750 /** 1759 /**
1751 * Returns a Date object representing the result of calling ToString(value) 1760 * Returns a Date object representing the result of calling ToString(value)
1752 * according to the effective locale and the formatting options of this 1761 * according to the effective locale and the formatting options of this
1753 * DateTimeFormat. 1762 * DateTimeFormat.
1754 * Returns undefined if date string cannot be parsed. 1763 * Returns undefined if date string cannot be parsed.
1755 */ 1764 */
1756 function parseDate(formatter, value) { 1765 function IntlParseDate(formatter, value) {
1757 return %InternalDateParse(%GetImplFromInitializedIntlObject(formatter), 1766 return %InternalDateParse(%GetImplFromInitializedIntlObject(formatter),
1758 GlobalString(value)); 1767 GlobalString(value));
1759 } 1768 }
1760 1769
1761 1770
1762 // 0 because date is optional argument. 1771 // 0 because date is optional argument.
1763 AddBoundMethod(Intl.DateTimeFormat, 'format', formatDate, 0); 1772 AddBoundMethod(Intl.DateTimeFormat, 'format', formatDate, 0);
1764 AddBoundMethod(Intl.DateTimeFormat, 'v8Parse', parseDate, 1);
1765 1773
1766 1774
1767 /** 1775 /**
1768 * Returns canonical Area/Location(/Location) name, or throws an exception 1776 * Returns canonical Area/Location(/Location) name, or throws an exception
1769 * if the zone name is invalid IANA name. 1777 * if the zone name is invalid IANA name.
1770 */ 1778 */
1771 function canonicalizeTimeZoneID(tzID) { 1779 function canonicalizeTimeZoneID(tzID) {
1772 // Skip undefined zones. 1780 // Skip undefined zones.
1773 if (IS_UNDEFINED(tzID)) { 1781 if (IS_UNDEFINED(tzID)) {
1774 return tzID; 1782 return tzID;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1829 locale: {writable: true} 1837 locale: {writable: true}
1830 }); 1838 });
1831 1839
1832 var internalIterator = %CreateBreakIterator(locale.locale, 1840 var internalIterator = %CreateBreakIterator(locale.locale,
1833 internalOptions, 1841 internalOptions,
1834 resolved); 1842 resolved);
1835 1843
1836 %MarkAsInitializedIntlObjectOfType(iterator, 'breakiterator', 1844 %MarkAsInitializedIntlObjectOfType(iterator, 'breakiterator',
1837 internalIterator); 1845 internalIterator);
1838 iterator[resolvedSymbol] = resolved; 1846 iterator[resolvedSymbol] = resolved;
1839 %object_define_property(iterator, 'resolved', resolvedAccessor); 1847 if (FLAG_intl_extra) {
1848 %object_define_property(iterator, 'resolved', resolvedAccessor);
1849 }
1840 1850
1841 return iterator; 1851 return iterator;
1842 } 1852 }
1843 1853
1844 1854
1845 /** 1855 /**
1846 * Constructs Intl.v8BreakIterator object given optional locales and options 1856 * Constructs Intl.v8BreakIterator object given optional locales and options
1847 * parameters. 1857 * parameters.
1848 * 1858 *
1849 * @constructor 1859 * @constructor
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
2128 throw MakeTypeError(kOrdinaryFunctionCalledAsConstructor); 2138 throw MakeTypeError(kOrdinaryFunctionCalledAsConstructor);
2129 } 2139 }
2130 2140
2131 var locales = arguments[0]; 2141 var locales = arguments[0];
2132 var options = arguments[1]; 2142 var options = arguments[1];
2133 return toLocaleDateTime( 2143 return toLocaleDateTime(
2134 this, locales, options, 'time', 'time', 'dateformattime'); 2144 this, locales, options, 'time', 'time', 'dateformattime');
2135 } 2145 }
2136 ); 2146 );
2137 2147
2148 utils.Export(function(to) {
2149 to.AddBoundMethod = AddBoundMethod;
2150 to.IntlParseDate = IntlParseDate;
2151 to.IntlParseNumber = IntlParseNumber;
2152 });
2153
2138 }) 2154 })
OLDNEW
« no previous file with comments | « src/flag-definitions.h ('k') | src/js/intl-extra.js » ('j') | test/intl/extra-flag.js » ('J')

Powered by Google App Engine
This is Rietveld 408576698