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

Side by Side Diff: src/i18n.js

Issue 255273004: Remove duplicate ToObject implementaion from i18n. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | 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 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 */ 295 */
296 function supportedLocalesOf(service, locales, options) { 296 function supportedLocalesOf(service, locales, options) {
297 if (IS_NULL(service.match(GetServiceRE()))) { 297 if (IS_NULL(service.match(GetServiceRE()))) {
298 throw new $Error('Internal error, wrong service type: ' + service); 298 throw new $Error('Internal error, wrong service type: ' + service);
299 } 299 }
300 300
301 // Provide defaults if matcher was not specified. 301 // Provide defaults if matcher was not specified.
302 if (options === undefined) { 302 if (options === undefined) {
303 options = {}; 303 options = {};
304 } else { 304 } else {
305 options = toObject(options); 305 options = ToObject(options);
306 } 306 }
307 307
308 var matcher = options.localeMatcher; 308 var matcher = options.localeMatcher;
309 if (matcher !== undefined) { 309 if (matcher !== undefined) {
310 matcher = $String(matcher); 310 matcher = $String(matcher);
311 if (matcher !== 'lookup' && matcher !== 'best fit') { 311 if (matcher !== 'lookup' && matcher !== 'best fit') {
312 throw new $RangeError('Illegal value for localeMatcher:' + matcher); 312 throw new $RangeError('Illegal value for localeMatcher:' + matcher);
313 } 313 }
314 } else { 314 } else {
315 matcher = 'best fit'; 315 matcher = 'best fit';
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
529 // There is a value that's too long, or that doesn't have a key. 529 // There is a value that's too long, or that doesn't have a key.
530 return {}; 530 return {};
531 } 531 }
532 } 532 }
533 533
534 return extensionMap; 534 return extensionMap;
535 } 535 }
536 536
537 537
538 /** 538 /**
539 * Converts parameter to an Object if possible.
540 */
541 function toObject(value) {
542 if (IS_NULL_OR_UNDEFINED(value)) {
543 throw new $TypeError('Value cannot be converted to an Object.');
544 }
545
546 return $Object(value);
547 }
548
549
550 /**
551 * Populates internalOptions object with boolean key-value pairs 539 * Populates internalOptions object with boolean key-value pairs
552 * from extensionMap and options. 540 * from extensionMap and options.
553 * Returns filtered extension (number and date format constructors use 541 * Returns filtered extension (number and date format constructors use
554 * Unicode extensions for passing parameters to ICU). 542 * Unicode extensions for passing parameters to ICU).
555 * It's used for extension-option pairs only, e.g. kn-normalization, but not 543 * It's used for extension-option pairs only, e.g. kn-normalization, but not
556 * for 'sensitivity' since it doesn't have extension equivalent. 544 * for 'sensitivity' since it doesn't have extension equivalent.
557 * Extensions like nu and ca don't have options equivalent, so we place 545 * Extensions like nu and ca don't have options equivalent, so we place
558 * undefined in the map.property to denote that. 546 * undefined in the map.property to denote that.
559 */ 547 */
560 function setOptions(inOptions, extensionMap, keyValues, getOption, outOptions) { 548 function setOptions(inOptions, extensionMap, keyValues, getOption, outOptions) {
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
769 if (locales === undefined) { 757 if (locales === undefined) {
770 // Constructor is called without arguments. 758 // Constructor is called without arguments.
771 seen = []; 759 seen = [];
772 } else { 760 } else {
773 // We allow single string localeID. 761 // We allow single string localeID.
774 if (typeof locales === 'string') { 762 if (typeof locales === 'string') {
775 seen.push(canonicalizeLanguageTag(locales)); 763 seen.push(canonicalizeLanguageTag(locales));
776 return freezeArray(seen); 764 return freezeArray(seen);
777 } 765 }
778 766
779 var o = toObject(locales); 767 var o = ToObject(locales);
780 // Converts it to UInt32 (>>> is shr on 32bit integers). 768 // Converts it to UInt32 (>>> is shr on 32bit integers).
781 var len = o.length >>> 0; 769 var len = o.length >>> 0;
782 770
783 for (var k = 0; k < len; k++) { 771 for (var k = 0; k < len; k++) {
784 if (k in o) { 772 if (k in o) {
785 var value = o[k]; 773 var value = o[k];
786 774
787 var tag = canonicalizeLanguageTag(value); 775 var tag = canonicalizeLanguageTag(value);
788 776
789 if (seen.indexOf(tag) === -1) { 777 if (seen.indexOf(tag) === -1) {
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
981 */ 969 */
982 %SetProperty(Intl, 'Collator', function() { 970 %SetProperty(Intl, 'Collator', function() {
983 var locales = %_Arguments(0); 971 var locales = %_Arguments(0);
984 var options = %_Arguments(1); 972 var options = %_Arguments(1);
985 973
986 if (!this || this === Intl) { 974 if (!this || this === Intl) {
987 // Constructor is called as a function. 975 // Constructor is called as a function.
988 return new Intl.Collator(locales, options); 976 return new Intl.Collator(locales, options);
989 } 977 }
990 978
991 return initializeCollator(toObject(this), locales, options); 979 return initializeCollator(ToObject(this), locales, options);
992 }, 980 },
993 DONT_ENUM 981 DONT_ENUM
994 ); 982 );
995 983
996 984
997 /** 985 /**
998 * Collator resolvedOptions method. 986 * Collator resolvedOptions method.
999 */ 987 */
1000 %SetProperty(Intl.Collator.prototype, 'resolvedOptions', function() { 988 %SetProperty(Intl.Collator.prototype, 'resolvedOptions', function() {
1001 if (%_IsConstructCall()) { 989 if (%_IsConstructCall()) {
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
1208 */ 1196 */
1209 %SetProperty(Intl, 'NumberFormat', function() { 1197 %SetProperty(Intl, 'NumberFormat', function() {
1210 var locales = %_Arguments(0); 1198 var locales = %_Arguments(0);
1211 var options = %_Arguments(1); 1199 var options = %_Arguments(1);
1212 1200
1213 if (!this || this === Intl) { 1201 if (!this || this === Intl) {
1214 // Constructor is called as a function. 1202 // Constructor is called as a function.
1215 return new Intl.NumberFormat(locales, options); 1203 return new Intl.NumberFormat(locales, options);
1216 } 1204 }
1217 1205
1218 return initializeNumberFormat(toObject(this), locales, options); 1206 return initializeNumberFormat(ToObject(this), locales, options);
1219 }, 1207 },
1220 DONT_ENUM 1208 DONT_ENUM
1221 ); 1209 );
1222 1210
1223 1211
1224 /** 1212 /**
1225 * NumberFormat resolvedOptions method. 1213 * NumberFormat resolvedOptions method.
1226 */ 1214 */
1227 %SetProperty(Intl.NumberFormat.prototype, 'resolvedOptions', function() { 1215 %SetProperty(Intl.NumberFormat.prototype, 'resolvedOptions', function() {
1228 if (%_IsConstructCall()) { 1216 if (%_IsConstructCall()) {
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
1461 } 1449 }
1462 1450
1463 1451
1464 /** 1452 /**
1465 * Returns options with at least default values in it. 1453 * Returns options with at least default values in it.
1466 */ 1454 */
1467 function toDateTimeOptions(options, required, defaults) { 1455 function toDateTimeOptions(options, required, defaults) {
1468 if (options === undefined) { 1456 if (options === undefined) {
1469 options = null; 1457 options = null;
1470 } else { 1458 } else {
1471 options = toObject(options); 1459 options = ToObject(options);
1472 } 1460 }
1473 1461
1474 options = $Object.apply(this, [options]); 1462 options = $Object.apply(this, [options]);
1475 1463
1476 var needsDefault = true; 1464 var needsDefault = true;
1477 if ((required === 'date' || required === 'any') && 1465 if ((required === 'date' || required === 'any') &&
1478 (options.weekday !== undefined || options.year !== undefined || 1466 (options.weekday !== undefined || options.year !== undefined ||
1479 options.month !== undefined || options.day !== undefined)) { 1467 options.month !== undefined || options.day !== undefined)) {
1480 needsDefault = false; 1468 needsDefault = false;
1481 } 1469 }
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
1603 */ 1591 */
1604 %SetProperty(Intl, 'DateTimeFormat', function() { 1592 %SetProperty(Intl, 'DateTimeFormat', function() {
1605 var locales = %_Arguments(0); 1593 var locales = %_Arguments(0);
1606 var options = %_Arguments(1); 1594 var options = %_Arguments(1);
1607 1595
1608 if (!this || this === Intl) { 1596 if (!this || this === Intl) {
1609 // Constructor is called as a function. 1597 // Constructor is called as a function.
1610 return new Intl.DateTimeFormat(locales, options); 1598 return new Intl.DateTimeFormat(locales, options);
1611 } 1599 }
1612 1600
1613 return initializeDateTimeFormat(toObject(this), locales, options); 1601 return initializeDateTimeFormat(ToObject(this), locales, options);
1614 }, 1602 },
1615 DONT_ENUM 1603 DONT_ENUM
1616 ); 1604 );
1617 1605
1618 1606
1619 /** 1607 /**
1620 * DateTimeFormat resolvedOptions method. 1608 * DateTimeFormat resolvedOptions method.
1621 */ 1609 */
1622 %SetProperty(Intl.DateTimeFormat.prototype, 'resolvedOptions', function() { 1610 %SetProperty(Intl.DateTimeFormat.prototype, 'resolvedOptions', function() {
1623 if (%_IsConstructCall()) { 1611 if (%_IsConstructCall()) {
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
1809 */ 1797 */
1810 %SetProperty(Intl, 'v8BreakIterator', function() { 1798 %SetProperty(Intl, 'v8BreakIterator', function() {
1811 var locales = %_Arguments(0); 1799 var locales = %_Arguments(0);
1812 var options = %_Arguments(1); 1800 var options = %_Arguments(1);
1813 1801
1814 if (!this || this === Intl) { 1802 if (!this || this === Intl) {
1815 // Constructor is called as a function. 1803 // Constructor is called as a function.
1816 return new Intl.v8BreakIterator(locales, options); 1804 return new Intl.v8BreakIterator(locales, options);
1817 } 1805 }
1818 1806
1819 return initializeBreakIterator(toObject(this), locales, options); 1807 return initializeBreakIterator(ToObject(this), locales, options);
1820 }, 1808 },
1821 DONT_ENUM 1809 DONT_ENUM
1822 ); 1810 );
1823 1811
1824 1812
1825 /** 1813 /**
1826 * BreakIterator resolvedOptions method. 1814 * BreakIterator resolvedOptions method.
1827 */ 1815 */
1828 %SetProperty(Intl.v8BreakIterator.prototype, 'resolvedOptions', function() { 1816 %SetProperty(Intl.v8BreakIterator.prototype, 'resolvedOptions', function() {
1829 if (%_IsConstructCall()) { 1817 if (%_IsConstructCall()) {
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
2137 writable: true, 2125 writable: true,
2138 configurable: true, 2126 configurable: true,
2139 enumerable: false 2127 enumerable: false
2140 }); 2128 });
2141 %FunctionSetName($Date.prototype.toLocaleTimeString, 'toLocaleTimeString'); 2129 %FunctionSetName($Date.prototype.toLocaleTimeString, 'toLocaleTimeString');
2142 %FunctionRemovePrototype($Date.prototype.toLocaleTimeString); 2130 %FunctionRemovePrototype($Date.prototype.toLocaleTimeString);
2143 %SetNativeFlag($Date.prototype.toLocaleTimeString); 2131 %SetNativeFlag($Date.prototype.toLocaleTimeString);
2144 2132
2145 return Intl; 2133 return Intl;
2146 }())}); 2134 }())});
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698