OLD | NEW |
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 */ |
(...skipping 15 matching lines...) Expand all Loading... |
26 var GlobalDate = global.Date; | 26 var GlobalDate = global.Date; |
27 var GlobalNumber = global.Number; | 27 var GlobalNumber = global.Number; |
28 var GlobalRegExp = global.RegExp; | 28 var GlobalRegExp = global.RegExp; |
29 var GlobalString = global.String; | 29 var GlobalString = global.String; |
30 var MakeError; | 30 var MakeError; |
31 var MakeRangeError; | 31 var MakeRangeError; |
32 var MakeTypeError; | 32 var MakeTypeError; |
33 var MathFloor; | 33 var MathFloor; |
34 var ObjectDefineProperties = utils.ImportNow("ObjectDefineProperties"); | 34 var ObjectDefineProperties = utils.ImportNow("ObjectDefineProperties"); |
35 var ObjectDefineProperty = utils.ImportNow("ObjectDefineProperty"); | 35 var ObjectDefineProperty = utils.ImportNow("ObjectDefineProperty"); |
| 36 var patternSymbol = utils.ImportNow("intl_pattern_symbol"); |
36 var RegExpTest; | 37 var RegExpTest; |
| 38 var resolvedSymbol = utils.ImportNow("intl_resolved_symbol"); |
37 var StringIndexOf; | 39 var StringIndexOf; |
38 var StringLastIndexOf; | 40 var StringLastIndexOf; |
39 var StringMatch; | 41 var StringMatch; |
40 var StringReplace; | 42 var StringReplace; |
41 var StringSplit; | 43 var StringSplit; |
42 var StringSubstr; | 44 var StringSubstr; |
43 var StringSubstring; | 45 var StringSubstring; |
44 | 46 |
45 utils.Import(function(from) { | 47 utils.Import(function(from) { |
46 ArrayIndexOf = from.ArrayIndexOf; | 48 ArrayIndexOf = from.ArrayIndexOf; |
(...skipping 824 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
871 var language = '(' + alpha + '{2,3}(-' + extLang + ')?|' + alpha + '{4}|' + | 873 var language = '(' + alpha + '{2,3}(-' + extLang + ')?|' + alpha + '{4}|' + |
872 alpha + '{5,8})'; | 874 alpha + '{5,8})'; |
873 var langTag = language + '(-' + script + ')?(-' + region + ')?(-' + | 875 var langTag = language + '(-' + script + ')?(-' + region + ')?(-' + |
874 variant + ')*(-' + extension + ')*(-' + privateUse + ')?'; | 876 variant + ')*(-' + extension + ')*(-' + privateUse + ')?'; |
875 | 877 |
876 var languageTag = | 878 var languageTag = |
877 '^(' + langTag + '|' + privateUse + '|' + grandfathered + ')$'; | 879 '^(' + langTag + '|' + privateUse + '|' + grandfathered + ')$'; |
878 LANGUAGE_TAG_RE = new GlobalRegExp(languageTag, 'i'); | 880 LANGUAGE_TAG_RE = new GlobalRegExp(languageTag, 'i'); |
879 } | 881 } |
880 | 882 |
| 883 var resolvedAccessor = { |
| 884 get() { |
| 885 %IncrementUseCounter(kIntlResolved); |
| 886 return this[resolvedSymbol]; |
| 887 }, |
| 888 set(value) { |
| 889 this[resolvedSymbol] = value; |
| 890 } |
| 891 }; |
| 892 |
881 /** | 893 /** |
882 * Initializes the given object so it's a valid Collator instance. | 894 * Initializes the given object so it's a valid Collator instance. |
883 * Useful for subclassing. | 895 * Useful for subclassing. |
884 */ | 896 */ |
885 function initializeCollator(collator, locales, options) { | 897 function initializeCollator(collator, locales, options) { |
886 if (%IsInitializedIntlObject(collator)) { | 898 if (%IsInitializedIntlObject(collator)) { |
887 throw MakeTypeError(kReinitializeIntl, "Collator"); | 899 throw MakeTypeError(kReinitializeIntl, "Collator"); |
888 } | 900 } |
889 | 901 |
890 if (IS_UNDEFINED(options)) { | 902 if (IS_UNDEFINED(options)) { |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
969 strength: {writable: true}, | 981 strength: {writable: true}, |
970 usage: {value: internalOptions.usage, writable: true} | 982 usage: {value: internalOptions.usage, writable: true} |
971 }); | 983 }); |
972 | 984 |
973 var internalCollator = %CreateCollator(requestedLocale, | 985 var internalCollator = %CreateCollator(requestedLocale, |
974 internalOptions, | 986 internalOptions, |
975 resolved); | 987 resolved); |
976 | 988 |
977 // Writable, configurable and enumerable are set to false by default. | 989 // Writable, configurable and enumerable are set to false by default. |
978 %MarkAsInitializedIntlObjectOfType(collator, 'collator', internalCollator); | 990 %MarkAsInitializedIntlObjectOfType(collator, 'collator', internalCollator); |
979 ObjectDefineProperty(collator, 'resolved', {value: resolved}); | 991 collator[resolvedSymbol] = resolved; |
| 992 ObjectDefineProperty(collator, 'resolved', resolvedAccessor); |
980 | 993 |
981 return collator; | 994 return collator; |
982 } | 995 } |
983 | 996 |
984 | 997 |
985 /** | 998 /** |
986 * Constructs Intl.Collator object given optional locales and options | 999 * Constructs Intl.Collator object given optional locales and options |
987 * parameters. | 1000 * parameters. |
988 * | 1001 * |
989 * @constructor | 1002 * @constructor |
(...skipping 19 matching lines...) Expand all Loading... |
1009 %AddNamedProperty(Intl.Collator.prototype, 'resolvedOptions', function() { | 1022 %AddNamedProperty(Intl.Collator.prototype, 'resolvedOptions', function() { |
1010 if (!IS_UNDEFINED(new.target)) { | 1023 if (!IS_UNDEFINED(new.target)) { |
1011 throw MakeTypeError(kOrdinaryFunctionCalledAsConstructor); | 1024 throw MakeTypeError(kOrdinaryFunctionCalledAsConstructor); |
1012 } | 1025 } |
1013 | 1026 |
1014 if (!%IsInitializedIntlObjectOfType(this, 'collator')) { | 1027 if (!%IsInitializedIntlObjectOfType(this, 'collator')) { |
1015 throw MakeTypeError(kResolvedOptionsCalledOnNonObject, "Collator"); | 1028 throw MakeTypeError(kResolvedOptionsCalledOnNonObject, "Collator"); |
1016 } | 1029 } |
1017 | 1030 |
1018 var coll = this; | 1031 var coll = this; |
1019 var locale = getOptimalLanguageTag(coll.resolved.requestedLocale, | 1032 var locale = getOptimalLanguageTag(coll[resolvedSymbol].requestedLocale, |
1020 coll.resolved.locale); | 1033 coll[resolvedSymbol].locale); |
1021 | 1034 |
1022 return { | 1035 return { |
1023 locale: locale, | 1036 locale: locale, |
1024 usage: coll.resolved.usage, | 1037 usage: coll[resolvedSymbol].usage, |
1025 sensitivity: coll.resolved.sensitivity, | 1038 sensitivity: coll[resolvedSymbol].sensitivity, |
1026 ignorePunctuation: coll.resolved.ignorePunctuation, | 1039 ignorePunctuation: coll[resolvedSymbol].ignorePunctuation, |
1027 numeric: coll.resolved.numeric, | 1040 numeric: coll[resolvedSymbol].numeric, |
1028 caseFirst: coll.resolved.caseFirst, | 1041 caseFirst: coll[resolvedSymbol].caseFirst, |
1029 collation: coll.resolved.collation | 1042 collation: coll[resolvedSymbol].collation |
1030 }; | 1043 }; |
1031 }, | 1044 }, |
1032 DONT_ENUM | 1045 DONT_ENUM |
1033 ); | 1046 ); |
1034 %FunctionSetName(Intl.Collator.prototype.resolvedOptions, 'resolvedOptions'); | 1047 %FunctionSetName(Intl.Collator.prototype.resolvedOptions, 'resolvedOptions'); |
1035 %FunctionRemovePrototype(Intl.Collator.prototype.resolvedOptions); | 1048 %FunctionRemovePrototype(Intl.Collator.prototype.resolvedOptions); |
1036 %SetNativeFlag(Intl.Collator.prototype.resolvedOptions); | 1049 %SetNativeFlag(Intl.Collator.prototype.resolvedOptions); |
1037 | 1050 |
1038 | 1051 |
1039 /** | 1052 /** |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1096 value = GlobalNumber(value); | 1109 value = GlobalNumber(value); |
1097 if (IsNaN(value) || value < min || value > max) { | 1110 if (IsNaN(value) || value < min || value > max) { |
1098 throw MakeRangeError(kPropertyValueOutOfRange, property); | 1111 throw MakeRangeError(kPropertyValueOutOfRange, property); |
1099 } | 1112 } |
1100 return MathFloor(value); | 1113 return MathFloor(value); |
1101 } | 1114 } |
1102 | 1115 |
1103 return fallback; | 1116 return fallback; |
1104 } | 1117 } |
1105 | 1118 |
| 1119 var patternAccessor = { |
| 1120 get() { |
| 1121 %IncrementUseCounter(kIntlPattern); |
| 1122 return this[patternSymbol]; |
| 1123 }, |
| 1124 set(value) { |
| 1125 this[patternSymbol] = value; |
| 1126 } |
| 1127 }; |
1106 | 1128 |
1107 /** | 1129 /** |
1108 * Initializes the given object so it's a valid NumberFormat instance. | 1130 * Initializes the given object so it's a valid NumberFormat instance. |
1109 * Useful for subclassing. | 1131 * Useful for subclassing. |
1110 */ | 1132 */ |
1111 function initializeNumberFormat(numberFormat, locales, options) { | 1133 function initializeNumberFormat(numberFormat, locales, options) { |
1112 if (%IsInitializedIntlObject(numberFormat)) { | 1134 if (%IsInitializedIntlObject(numberFormat)) { |
1113 throw MakeTypeError(kReinitializeIntl, "NumberFormat"); | 1135 throw MakeTypeError(kReinitializeIntl, "NumberFormat"); |
1114 } | 1136 } |
1115 | 1137 |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1191 | 1213 |
1192 var requestedLocale = locale.locale + extension; | 1214 var requestedLocale = locale.locale + extension; |
1193 var resolved = ObjectDefineProperties({}, { | 1215 var resolved = ObjectDefineProperties({}, { |
1194 currency: {writable: true}, | 1216 currency: {writable: true}, |
1195 currencyDisplay: {writable: true}, | 1217 currencyDisplay: {writable: true}, |
1196 locale: {writable: true}, | 1218 locale: {writable: true}, |
1197 maximumFractionDigits: {writable: true}, | 1219 maximumFractionDigits: {writable: true}, |
1198 minimumFractionDigits: {writable: true}, | 1220 minimumFractionDigits: {writable: true}, |
1199 minimumIntegerDigits: {writable: true}, | 1221 minimumIntegerDigits: {writable: true}, |
1200 numberingSystem: {writable: true}, | 1222 numberingSystem: {writable: true}, |
| 1223 pattern: patternAccessor, |
1201 requestedLocale: {value: requestedLocale, writable: true}, | 1224 requestedLocale: {value: requestedLocale, writable: true}, |
1202 style: {value: internalOptions.style, writable: true}, | 1225 style: {value: internalOptions.style, writable: true}, |
1203 useGrouping: {writable: true} | 1226 useGrouping: {writable: true} |
1204 }); | 1227 }); |
1205 if (%HasOwnProperty(internalOptions, 'minimumSignificantDigits')) { | 1228 if (%HasOwnProperty(internalOptions, 'minimumSignificantDigits')) { |
1206 defineWEProperty(resolved, 'minimumSignificantDigits', UNDEFINED); | 1229 defineWEProperty(resolved, 'minimumSignificantDigits', UNDEFINED); |
1207 } | 1230 } |
1208 if (%HasOwnProperty(internalOptions, 'maximumSignificantDigits')) { | 1231 if (%HasOwnProperty(internalOptions, 'maximumSignificantDigits')) { |
1209 defineWEProperty(resolved, 'maximumSignificantDigits', UNDEFINED); | 1232 defineWEProperty(resolved, 'maximumSignificantDigits', UNDEFINED); |
1210 } | 1233 } |
1211 var formatter = %CreateNumberFormat(requestedLocale, | 1234 var formatter = %CreateNumberFormat(requestedLocale, |
1212 internalOptions, | 1235 internalOptions, |
1213 resolved); | 1236 resolved); |
1214 | 1237 |
1215 if (internalOptions.style === 'currency') { | 1238 if (internalOptions.style === 'currency') { |
1216 ObjectDefineProperty(resolved, 'currencyDisplay', {value: currencyDisplay, | 1239 ObjectDefineProperty(resolved, 'currencyDisplay', {value: currencyDisplay, |
1217 writable: true}); | 1240 writable: true}); |
1218 } | 1241 } |
1219 | 1242 |
1220 %MarkAsInitializedIntlObjectOfType(numberFormat, 'numberformat', formatter); | 1243 %MarkAsInitializedIntlObjectOfType(numberFormat, 'numberformat', formatter); |
1221 ObjectDefineProperty(numberFormat, 'resolved', {value: resolved}); | 1244 numberFormat[resolvedSymbol] = resolved; |
| 1245 ObjectDefineProperty(numberFormat, 'resolved', resolvedAccessor); |
1222 | 1246 |
1223 return numberFormat; | 1247 return numberFormat; |
1224 } | 1248 } |
1225 | 1249 |
1226 | 1250 |
1227 /** | 1251 /** |
1228 * Constructs Intl.NumberFormat object given optional locales and options | 1252 * Constructs Intl.NumberFormat object given optional locales and options |
1229 * parameters. | 1253 * parameters. |
1230 * | 1254 * |
1231 * @constructor | 1255 * @constructor |
(...skipping 19 matching lines...) Expand all Loading... |
1251 %AddNamedProperty(Intl.NumberFormat.prototype, 'resolvedOptions', function() { | 1275 %AddNamedProperty(Intl.NumberFormat.prototype, 'resolvedOptions', function() { |
1252 if (!IS_UNDEFINED(new.target)) { | 1276 if (!IS_UNDEFINED(new.target)) { |
1253 throw MakeTypeError(kOrdinaryFunctionCalledAsConstructor); | 1277 throw MakeTypeError(kOrdinaryFunctionCalledAsConstructor); |
1254 } | 1278 } |
1255 | 1279 |
1256 if (!%IsInitializedIntlObjectOfType(this, 'numberformat')) { | 1280 if (!%IsInitializedIntlObjectOfType(this, 'numberformat')) { |
1257 throw MakeTypeError(kResolvedOptionsCalledOnNonObject, "NumberFormat"); | 1281 throw MakeTypeError(kResolvedOptionsCalledOnNonObject, "NumberFormat"); |
1258 } | 1282 } |
1259 | 1283 |
1260 var format = this; | 1284 var format = this; |
1261 var locale = getOptimalLanguageTag(format.resolved.requestedLocale, | 1285 var locale = getOptimalLanguageTag(format[resolvedSymbol].requestedLocale, |
1262 format.resolved.locale); | 1286 format[resolvedSymbol].locale); |
1263 | 1287 |
1264 var result = { | 1288 var result = { |
1265 locale: locale, | 1289 locale: locale, |
1266 numberingSystem: format.resolved.numberingSystem, | 1290 numberingSystem: format[resolvedSymbol].numberingSystem, |
1267 style: format.resolved.style, | 1291 style: format[resolvedSymbol].style, |
1268 useGrouping: format.resolved.useGrouping, | 1292 useGrouping: format[resolvedSymbol].useGrouping, |
1269 minimumIntegerDigits: format.resolved.minimumIntegerDigits, | 1293 minimumIntegerDigits: format[resolvedSymbol].minimumIntegerDigits, |
1270 minimumFractionDigits: format.resolved.minimumFractionDigits, | 1294 minimumFractionDigits: format[resolvedSymbol].minimumFractionDigits, |
1271 maximumFractionDigits: format.resolved.maximumFractionDigits, | 1295 maximumFractionDigits: format[resolvedSymbol].maximumFractionDigits, |
1272 }; | 1296 }; |
1273 | 1297 |
1274 if (result.style === 'currency') { | 1298 if (result.style === 'currency') { |
1275 defineWECProperty(result, 'currency', format.resolved.currency); | 1299 defineWECProperty(result, 'currency', format[resolvedSymbol].currency); |
1276 defineWECProperty(result, 'currencyDisplay', | 1300 defineWECProperty(result, 'currencyDisplay', |
1277 format.resolved.currencyDisplay); | 1301 format[resolvedSymbol].currencyDisplay); |
1278 } | 1302 } |
1279 | 1303 |
1280 if (%HasOwnProperty(format.resolved, 'minimumSignificantDigits')) { | 1304 if (%HasOwnProperty(format[resolvedSymbol], 'minimumSignificantDigits')) { |
1281 defineWECProperty(result, 'minimumSignificantDigits', | 1305 defineWECProperty(result, 'minimumSignificantDigits', |
1282 format.resolved.minimumSignificantDigits); | 1306 format[resolvedSymbol].minimumSignificantDigits); |
1283 } | 1307 } |
1284 | 1308 |
1285 if (%HasOwnProperty(format.resolved, 'maximumSignificantDigits')) { | 1309 if (%HasOwnProperty(format[resolvedSymbol], 'maximumSignificantDigits')) { |
1286 defineWECProperty(result, 'maximumSignificantDigits', | 1310 defineWECProperty(result, 'maximumSignificantDigits', |
1287 format.resolved.maximumSignificantDigits); | 1311 format[resolvedSymbol].maximumSignificantDigits); |
1288 } | 1312 } |
1289 | 1313 |
1290 return result; | 1314 return result; |
1291 }, | 1315 }, |
1292 DONT_ENUM | 1316 DONT_ENUM |
1293 ); | 1317 ); |
1294 %FunctionSetName(Intl.NumberFormat.prototype.resolvedOptions, | 1318 %FunctionSetName(Intl.NumberFormat.prototype.resolvedOptions, |
1295 'resolvedOptions'); | 1319 'resolvedOptions'); |
1296 %FunctionRemovePrototype(Intl.NumberFormat.prototype.resolvedOptions); | 1320 %FunctionRemovePrototype(Intl.NumberFormat.prototype.resolvedOptions); |
1297 %SetNativeFlag(Intl.NumberFormat.prototype.resolvedOptions); | 1321 %SetNativeFlag(Intl.NumberFormat.prototype.resolvedOptions); |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1595 var resolved = ObjectDefineProperties({}, { | 1619 var resolved = ObjectDefineProperties({}, { |
1596 calendar: {writable: true}, | 1620 calendar: {writable: true}, |
1597 day: {writable: true}, | 1621 day: {writable: true}, |
1598 era: {writable: true}, | 1622 era: {writable: true}, |
1599 hour12: {writable: true}, | 1623 hour12: {writable: true}, |
1600 hour: {writable: true}, | 1624 hour: {writable: true}, |
1601 locale: {writable: true}, | 1625 locale: {writable: true}, |
1602 minute: {writable: true}, | 1626 minute: {writable: true}, |
1603 month: {writable: true}, | 1627 month: {writable: true}, |
1604 numberingSystem: {writable: true}, | 1628 numberingSystem: {writable: true}, |
1605 pattern: {writable: true}, | 1629 [patternSymbol]: {writable: true}, |
| 1630 pattern: patternAccessor, |
1606 requestedLocale: {value: requestedLocale, writable: true}, | 1631 requestedLocale: {value: requestedLocale, writable: true}, |
1607 second: {writable: true}, | 1632 second: {writable: true}, |
1608 timeZone: {writable: true}, | 1633 timeZone: {writable: true}, |
1609 timeZoneName: {writable: true}, | 1634 timeZoneName: {writable: true}, |
1610 tz: {value: tz, writable: true}, | 1635 tz: {value: tz, writable: true}, |
1611 weekday: {writable: true}, | 1636 weekday: {writable: true}, |
1612 year: {writable: true} | 1637 year: {writable: true} |
1613 }); | 1638 }); |
1614 | 1639 |
1615 var formatter = %CreateDateTimeFormat( | 1640 var formatter = %CreateDateTimeFormat( |
1616 requestedLocale, {skeleton: ldmlString, timeZone: tz}, resolved); | 1641 requestedLocale, {skeleton: ldmlString, timeZone: tz}, resolved); |
1617 | 1642 |
1618 if (resolved.timeZone === "Etc/Unknown") { | 1643 if (resolved.timeZone === "Etc/Unknown") { |
1619 throw MakeRangeError(kUnsupportedTimeZone, tz); | 1644 throw MakeRangeError(kUnsupportedTimeZone, tz); |
1620 } | 1645 } |
1621 | 1646 |
1622 %MarkAsInitializedIntlObjectOfType(dateFormat, 'dateformat', formatter); | 1647 %MarkAsInitializedIntlObjectOfType(dateFormat, 'dateformat', formatter); |
1623 ObjectDefineProperty(dateFormat, 'resolved', {value: resolved}); | 1648 dateFormat[resolvedSymbol] = resolved; |
| 1649 ObjectDefineProperty(dateFormat, 'resolved', resolvedAccessor); |
1624 | 1650 |
1625 return dateFormat; | 1651 return dateFormat; |
1626 } | 1652 } |
1627 | 1653 |
1628 | 1654 |
1629 /** | 1655 /** |
1630 * Constructs Intl.DateTimeFormat object given optional locales and options | 1656 * Constructs Intl.DateTimeFormat object given optional locales and options |
1631 * parameters. | 1657 * parameters. |
1632 * | 1658 * |
1633 * @constructor | 1659 * @constructor |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1672 'islamic': 'islamic', | 1698 'islamic': 'islamic', |
1673 'hebrew': 'hebrew', | 1699 'hebrew': 'hebrew', |
1674 'chinese': 'chinese', | 1700 'chinese': 'chinese', |
1675 'indian': 'indian', | 1701 'indian': 'indian', |
1676 'coptic': 'coptic', | 1702 'coptic': 'coptic', |
1677 'ethiopic': 'ethiopic', | 1703 'ethiopic': 'ethiopic', |
1678 'ethiopic-amete-alem': 'ethioaa' | 1704 'ethiopic-amete-alem': 'ethioaa' |
1679 }; | 1705 }; |
1680 | 1706 |
1681 var format = this; | 1707 var format = this; |
1682 var fromPattern = fromLDMLString(format.resolved.pattern); | 1708 var fromPattern = fromLDMLString(format[resolvedSymbol][patternSymbol]); |
1683 var userCalendar = ICU_CALENDAR_MAP[format.resolved.calendar]; | 1709 var userCalendar = ICU_CALENDAR_MAP[format[resolvedSymbol].calendar]; |
1684 if (IS_UNDEFINED(userCalendar)) { | 1710 if (IS_UNDEFINED(userCalendar)) { |
1685 // Use ICU name if we don't have a match. It shouldn't happen, but | 1711 // Use ICU name if we don't have a match. It shouldn't happen, but |
1686 // it would be too strict to throw for this. | 1712 // it would be too strict to throw for this. |
1687 userCalendar = format.resolved.calendar; | 1713 userCalendar = format[resolvedSymbol].calendar; |
1688 } | 1714 } |
1689 | 1715 |
1690 var locale = getOptimalLanguageTag(format.resolved.requestedLocale, | 1716 var locale = getOptimalLanguageTag(format[resolvedSymbol].requestedLocale, |
1691 format.resolved.locale); | 1717 format[resolvedSymbol].locale); |
1692 | 1718 |
1693 var result = { | 1719 var result = { |
1694 locale: locale, | 1720 locale: locale, |
1695 numberingSystem: format.resolved.numberingSystem, | 1721 numberingSystem: format[resolvedSymbol].numberingSystem, |
1696 calendar: userCalendar, | 1722 calendar: userCalendar, |
1697 timeZone: format.resolved.timeZone | 1723 timeZone: format[resolvedSymbol].timeZone |
1698 }; | 1724 }; |
1699 | 1725 |
1700 addWECPropertyIfDefined(result, 'timeZoneName', fromPattern.timeZoneName); | 1726 addWECPropertyIfDefined(result, 'timeZoneName', fromPattern.timeZoneName); |
1701 addWECPropertyIfDefined(result, 'era', fromPattern.era); | 1727 addWECPropertyIfDefined(result, 'era', fromPattern.era); |
1702 addWECPropertyIfDefined(result, 'year', fromPattern.year); | 1728 addWECPropertyIfDefined(result, 'year', fromPattern.year); |
1703 addWECPropertyIfDefined(result, 'month', fromPattern.month); | 1729 addWECPropertyIfDefined(result, 'month', fromPattern.month); |
1704 addWECPropertyIfDefined(result, 'day', fromPattern.day); | 1730 addWECPropertyIfDefined(result, 'day', fromPattern.day); |
1705 addWECPropertyIfDefined(result, 'weekday', fromPattern.weekday); | 1731 addWECPropertyIfDefined(result, 'weekday', fromPattern.weekday); |
1706 addWECPropertyIfDefined(result, 'hour12', fromPattern.hour12); | 1732 addWECPropertyIfDefined(result, 'hour12', fromPattern.hour12); |
1707 addWECPropertyIfDefined(result, 'hour', fromPattern.hour); | 1733 addWECPropertyIfDefined(result, 'hour', fromPattern.hour); |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1839 type: {value: internalOptions.type, writable: true}, | 1865 type: {value: internalOptions.type, writable: true}, |
1840 locale: {writable: true} | 1866 locale: {writable: true} |
1841 }); | 1867 }); |
1842 | 1868 |
1843 var internalIterator = %CreateBreakIterator(locale.locale, | 1869 var internalIterator = %CreateBreakIterator(locale.locale, |
1844 internalOptions, | 1870 internalOptions, |
1845 resolved); | 1871 resolved); |
1846 | 1872 |
1847 %MarkAsInitializedIntlObjectOfType(iterator, 'breakiterator', | 1873 %MarkAsInitializedIntlObjectOfType(iterator, 'breakiterator', |
1848 internalIterator); | 1874 internalIterator); |
1849 ObjectDefineProperty(iterator, 'resolved', {value: resolved}); | 1875 iterator[resolvedSymbol] = resolved; |
| 1876 ObjectDefineProperty(iterator, 'resolved', resolvedAccessor); |
1850 | 1877 |
1851 return iterator; | 1878 return iterator; |
1852 } | 1879 } |
1853 | 1880 |
1854 | 1881 |
1855 /** | 1882 /** |
1856 * Constructs Intl.v8BreakIterator object given optional locales and options | 1883 * Constructs Intl.v8BreakIterator object given optional locales and options |
1857 * parameters. | 1884 * parameters. |
1858 * | 1885 * |
1859 * @constructor | 1886 * @constructor |
(...skipping 20 matching lines...) Expand all Loading... |
1880 function() { | 1907 function() { |
1881 if (!IS_UNDEFINED(new.target)) { | 1908 if (!IS_UNDEFINED(new.target)) { |
1882 throw MakeTypeError(kOrdinaryFunctionCalledAsConstructor); | 1909 throw MakeTypeError(kOrdinaryFunctionCalledAsConstructor); |
1883 } | 1910 } |
1884 | 1911 |
1885 if (!%IsInitializedIntlObjectOfType(this, 'breakiterator')) { | 1912 if (!%IsInitializedIntlObjectOfType(this, 'breakiterator')) { |
1886 throw MakeTypeError(kResolvedOptionsCalledOnNonObject, "v8BreakIterator"); | 1913 throw MakeTypeError(kResolvedOptionsCalledOnNonObject, "v8BreakIterator"); |
1887 } | 1914 } |
1888 | 1915 |
1889 var segmenter = this; | 1916 var segmenter = this; |
1890 var locale = getOptimalLanguageTag(segmenter.resolved.requestedLocale, | 1917 var locale = |
1891 segmenter.resolved.locale); | 1918 getOptimalLanguageTag(segmenter[resolvedSymbol].requestedLocale, |
| 1919 segmenter[resolvedSymbol].locale); |
1892 | 1920 |
1893 return { | 1921 return { |
1894 locale: locale, | 1922 locale: locale, |
1895 type: segmenter.resolved.type | 1923 type: segmenter[resolvedSymbol].type |
1896 }; | 1924 }; |
1897 }, | 1925 }, |
1898 DONT_ENUM | 1926 DONT_ENUM |
1899 ); | 1927 ); |
1900 %FunctionSetName(Intl.v8BreakIterator.prototype.resolvedOptions, | 1928 %FunctionSetName(Intl.v8BreakIterator.prototype.resolvedOptions, |
1901 'resolvedOptions'); | 1929 'resolvedOptions'); |
1902 %FunctionRemovePrototype(Intl.v8BreakIterator.prototype.resolvedOptions); | 1930 %FunctionRemovePrototype(Intl.v8BreakIterator.prototype.resolvedOptions); |
1903 %SetNativeFlag(Intl.v8BreakIterator.prototype.resolvedOptions); | 1931 %SetNativeFlag(Intl.v8BreakIterator.prototype.resolvedOptions); |
1904 | 1932 |
1905 | 1933 |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2160 } | 2188 } |
2161 | 2189 |
2162 var locales = %_Arguments(0); | 2190 var locales = %_Arguments(0); |
2163 var options = %_Arguments(1); | 2191 var options = %_Arguments(1); |
2164 return toLocaleDateTime( | 2192 return toLocaleDateTime( |
2165 this, locales, options, 'time', 'time', 'dateformattime'); | 2193 this, locales, options, 'time', 'time', 'dateformattime'); |
2166 } | 2194 } |
2167 ); | 2195 ); |
2168 | 2196 |
2169 }) | 2197 }) |
OLD | NEW |