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

Side by Side Diff: src/i18n.js

Issue 1266013006: [stubs] Unify (and optimize) implementation of ToObject. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add missing support for %_ToObject in TurboFan and Crankshaft. Created 5 years, 4 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
« no previous file with comments | « src/hydrogen.cc ('k') | src/ia32/builtins-ia32.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 */
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 */ 244 */
245 function supportedLocalesOf(service, locales, options) { 245 function supportedLocalesOf(service, locales, options) {
246 if (IS_NULL(%_CallFunction(service, GetServiceRE(), StringMatch))) { 246 if (IS_NULL(%_CallFunction(service, GetServiceRE(), StringMatch))) {
247 throw MakeError(kWrongServiceType, service); 247 throw MakeError(kWrongServiceType, service);
248 } 248 }
249 249
250 // Provide defaults if matcher was not specified. 250 // Provide defaults if matcher was not specified.
251 if (IS_UNDEFINED(options)) { 251 if (IS_UNDEFINED(options)) {
252 options = {}; 252 options = {};
253 } else { 253 } else {
254 options = $toObject(options); 254 options = TO_OBJECT(options);
255 } 255 }
256 256
257 var matcher = options.localeMatcher; 257 var matcher = options.localeMatcher;
258 if (!IS_UNDEFINED(matcher)) { 258 if (!IS_UNDEFINED(matcher)) {
259 matcher = GlobalString(matcher); 259 matcher = GlobalString(matcher);
260 if (matcher !== 'lookup' && matcher !== 'best fit') { 260 if (matcher !== 'lookup' && matcher !== 'best fit') {
261 throw MakeRangeError(kLocaleMatcher, matcher); 261 throw MakeRangeError(kLocaleMatcher, matcher);
262 } 262 }
263 } else { 263 } else {
264 matcher = 'best fit'; 264 matcher = 'best fit';
(...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 if (IS_UNDEFINED(locales)) { 710 if (IS_UNDEFINED(locales)) {
711 // Constructor is called without arguments. 711 // Constructor is called without arguments.
712 seen = []; 712 seen = [];
713 } else { 713 } else {
714 // We allow single string localeID. 714 // We allow single string localeID.
715 if (typeof locales === 'string') { 715 if (typeof locales === 'string') {
716 %_CallFunction(seen, canonicalizeLanguageTag(locales), $arrayPush); 716 %_CallFunction(seen, canonicalizeLanguageTag(locales), $arrayPush);
717 return freezeArray(seen); 717 return freezeArray(seen);
718 } 718 }
719 719
720 var o = $toObject(locales); 720 var o = TO_OBJECT(locales);
721 var len = TO_UINT32(o.length); 721 var len = TO_UINT32(o.length);
722 722
723 for (var k = 0; k < len; k++) { 723 for (var k = 0; k < len; k++) {
724 if (k in o) { 724 if (k in o) {
725 var value = o[k]; 725 var value = o[k];
726 726
727 var tag = canonicalizeLanguageTag(value); 727 var tag = canonicalizeLanguageTag(value);
728 728
729 if (%_CallFunction(seen, tag, ArrayIndexOf) === -1) { 729 if (%_CallFunction(seen, tag, ArrayIndexOf) === -1) {
730 %_CallFunction(seen, tag, $arrayPush); 730 %_CallFunction(seen, tag, $arrayPush);
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
944 */ 944 */
945 %AddNamedProperty(Intl, 'Collator', function() { 945 %AddNamedProperty(Intl, 'Collator', function() {
946 var locales = %_Arguments(0); 946 var locales = %_Arguments(0);
947 var options = %_Arguments(1); 947 var options = %_Arguments(1);
948 948
949 if (!this || this === Intl) { 949 if (!this || this === Intl) {
950 // Constructor is called as a function. 950 // Constructor is called as a function.
951 return new Intl.Collator(locales, options); 951 return new Intl.Collator(locales, options);
952 } 952 }
953 953
954 return initializeCollator($toObject(this), locales, options); 954 return initializeCollator(TO_OBJECT(this), locales, options);
955 }, 955 },
956 DONT_ENUM 956 DONT_ENUM
957 ); 957 );
958 958
959 959
960 /** 960 /**
961 * Collator resolvedOptions method. 961 * Collator resolvedOptions method.
962 */ 962 */
963 %AddNamedProperty(Intl.Collator.prototype, 'resolvedOptions', function() { 963 %AddNamedProperty(Intl.Collator.prototype, 'resolvedOptions', function() {
964 if (%_IsConstructCall()) { 964 if (%_IsConstructCall()) {
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
1185 */ 1185 */
1186 %AddNamedProperty(Intl, 'NumberFormat', function() { 1186 %AddNamedProperty(Intl, 'NumberFormat', function() {
1187 var locales = %_Arguments(0); 1187 var locales = %_Arguments(0);
1188 var options = %_Arguments(1); 1188 var options = %_Arguments(1);
1189 1189
1190 if (!this || this === Intl) { 1190 if (!this || this === Intl) {
1191 // Constructor is called as a function. 1191 // Constructor is called as a function.
1192 return new Intl.NumberFormat(locales, options); 1192 return new Intl.NumberFormat(locales, options);
1193 } 1193 }
1194 1194
1195 return initializeNumberFormat($toObject(this), locales, options); 1195 return initializeNumberFormat(TO_OBJECT(this), locales, options);
1196 }, 1196 },
1197 DONT_ENUM 1197 DONT_ENUM
1198 ); 1198 );
1199 1199
1200 1200
1201 /** 1201 /**
1202 * NumberFormat resolvedOptions method. 1202 * NumberFormat resolvedOptions method.
1203 */ 1203 */
1204 %AddNamedProperty(Intl.NumberFormat.prototype, 'resolvedOptions', function() { 1204 %AddNamedProperty(Intl.NumberFormat.prototype, 'resolvedOptions', function() {
1205 if (%_IsConstructCall()) { 1205 if (%_IsConstructCall()) {
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
1437 } 1437 }
1438 1438
1439 1439
1440 /** 1440 /**
1441 * Returns options with at least default values in it. 1441 * Returns options with at least default values in it.
1442 */ 1442 */
1443 function toDateTimeOptions(options, required, defaults) { 1443 function toDateTimeOptions(options, required, defaults) {
1444 if (IS_UNDEFINED(options)) { 1444 if (IS_UNDEFINED(options)) {
1445 options = {}; 1445 options = {};
1446 } else { 1446 } else {
1447 options = TO_OBJECT_INLINE(options); 1447 options = TO_OBJECT(options);
1448 } 1448 }
1449 1449
1450 var needsDefault = true; 1450 var needsDefault = true;
1451 if ((required === 'date' || required === 'any') && 1451 if ((required === 'date' || required === 'any') &&
1452 (!IS_UNDEFINED(options.weekday) || !IS_UNDEFINED(options.year) || 1452 (!IS_UNDEFINED(options.weekday) || !IS_UNDEFINED(options.year) ||
1453 !IS_UNDEFINED(options.month) || !IS_UNDEFINED(options.day))) { 1453 !IS_UNDEFINED(options.month) || !IS_UNDEFINED(options.day))) {
1454 needsDefault = false; 1454 needsDefault = false;
1455 } 1455 }
1456 1456
1457 if ((required === 'time' || required === 'any') && 1457 if ((required === 'time' || required === 'any') &&
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
1587 */ 1587 */
1588 %AddNamedProperty(Intl, 'DateTimeFormat', function() { 1588 %AddNamedProperty(Intl, 'DateTimeFormat', function() {
1589 var locales = %_Arguments(0); 1589 var locales = %_Arguments(0);
1590 var options = %_Arguments(1); 1590 var options = %_Arguments(1);
1591 1591
1592 if (!this || this === Intl) { 1592 if (!this || this === Intl) {
1593 // Constructor is called as a function. 1593 // Constructor is called as a function.
1594 return new Intl.DateTimeFormat(locales, options); 1594 return new Intl.DateTimeFormat(locales, options);
1595 } 1595 }
1596 1596
1597 return initializeDateTimeFormat($toObject(this), locales, options); 1597 return initializeDateTimeFormat(TO_OBJECT(this), locales, options);
1598 }, 1598 },
1599 DONT_ENUM 1599 DONT_ENUM
1600 ); 1600 );
1601 1601
1602 1602
1603 /** 1603 /**
1604 * DateTimeFormat resolvedOptions method. 1604 * DateTimeFormat resolvedOptions method.
1605 */ 1605 */
1606 %AddNamedProperty(Intl.DateTimeFormat.prototype, 'resolvedOptions', function() { 1606 %AddNamedProperty(Intl.DateTimeFormat.prototype, 'resolvedOptions', function() {
1607 if (%_IsConstructCall()) { 1607 if (%_IsConstructCall()) {
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
1807 */ 1807 */
1808 %AddNamedProperty(Intl, 'v8BreakIterator', function() { 1808 %AddNamedProperty(Intl, 'v8BreakIterator', function() {
1809 var locales = %_Arguments(0); 1809 var locales = %_Arguments(0);
1810 var options = %_Arguments(1); 1810 var options = %_Arguments(1);
1811 1811
1812 if (!this || this === Intl) { 1812 if (!this || this === Intl) {
1813 // Constructor is called as a function. 1813 // Constructor is called as a function.
1814 return new Intl.v8BreakIterator(locales, options); 1814 return new Intl.v8BreakIterator(locales, options);
1815 } 1815 }
1816 1816
1817 return initializeBreakIterator($toObject(this), locales, options); 1817 return initializeBreakIterator(TO_OBJECT(this), locales, options);
1818 }, 1818 },
1819 DONT_ENUM 1819 DONT_ENUM
1820 ); 1820 );
1821 1821
1822 1822
1823 /** 1823 /**
1824 * BreakIterator resolvedOptions method. 1824 * BreakIterator resolvedOptions method.
1825 */ 1825 */
1826 %AddNamedProperty(Intl.v8BreakIterator.prototype, 'resolvedOptions', 1826 %AddNamedProperty(Intl.v8BreakIterator.prototype, 'resolvedOptions',
1827 function() { 1827 function() {
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
2105 } 2105 }
2106 2106
2107 var locales = %_Arguments(0); 2107 var locales = %_Arguments(0);
2108 var options = %_Arguments(1); 2108 var options = %_Arguments(1);
2109 return toLocaleDateTime( 2109 return toLocaleDateTime(
2110 this, locales, options, 'time', 'time', 'dateformattime'); 2110 this, locales, options, 'time', 'time', 'dateformattime');
2111 } 2111 }
2112 ); 2112 );
2113 2113
2114 }) 2114 })
OLDNEW
« no previous file with comments | « src/hydrogen.cc ('k') | src/ia32/builtins-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698