Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 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 861 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 872 for (var i = index; i >= 0; i--) { | 872 for (var i = index; i >= 0; i--) { |
| 873 var current = this[i]; | 873 var current = this[i]; |
| 874 if (!IS_UNDEFINED(current) || i in this) { | 874 if (!IS_UNDEFINED(current) || i in this) { |
| 875 if (current === element) return i; | 875 if (current === element) return i; |
| 876 } | 876 } |
| 877 } | 877 } |
| 878 return -1; | 878 return -1; |
| 879 } | 879 } |
| 880 | 880 |
| 881 | 881 |
| 882 function ArrayReduce(callback, current) { | |
| 883 if (!IS_FUNCTION(callback)) { | |
| 884 throw MakeTypeError('called_non_callable', [ callback ]); | |
| 885 } | |
| 886 // Pull out the length so that modifications to the length in the | |
| 887 // loop will not affect the looping. | |
| 888 var length = this.length; | |
| 889 var i = 0; | |
| 890 | |
| 891 find_initial: if (%_ArgumentsLength() < 2) { | |
|
Dean McNamee
2009/04/21 09:19:50
I am missing why you need the label.
Christian Plesner Hansen
2009/04/21 09:39:17
I think the code style is
find_initial:
if (%_
Lasse Reichstein
2009/04/21 09:53:50
I use the label to have a location to break to, to
Lasse Reichstein
2009/04/21 09:53:50
Done.
| |
| 892 for (;i < length; i++) { | |
|
Dean McNamee
2009/04/21 09:19:50
space after ;
Lasse Reichstein
2009/04/21 09:53:50
Done.
| |
| 893 current = this[i]; | |
| 894 if (!IS_UNDEFINED(current) || i in this) { | |
| 895 i++; | |
| 896 break find_initial; | |
| 897 } | |
| 898 } | |
| 899 throw MakeTypeError('reduce_no_initial', []); | |
| 900 } | |
| 901 | |
| 902 for (; i < length; i++) { | |
| 903 var element = this[i]; | |
| 904 if (!IS_UNDEFINED(element) || i in this) { | |
| 905 current = callback.call(null, current, element, i, this); | |
| 906 } | |
| 907 } | |
| 908 return current; | |
| 909 } | |
| 910 | |
| 911 function ArrayReduceRight(callback, current) { | |
| 912 if (!IS_FUNCTION(callback)) { | |
| 913 throw MakeTypeError('called_non_callable', [ callback ]); | |
|
Dean McNamee
2009/04/21 09:19:50
no spaces around [ ] (consistency with [])
Lasse Reichstein
2009/04/21 09:53:50
Done.
| |
| 914 } | |
| 915 var i = this.length - 1; | |
| 916 | |
| 917 find_initial: if (%_ArgumentsLength() < 2) { | |
| 918 for (;i >= 0; i--) { | |
| 919 current = this[i]; | |
| 920 if (!IS_UNDEFINED(current) || i in this) { | |
| 921 i--; | |
| 922 break find_initial; | |
| 923 } | |
| 924 } | |
| 925 throw MakeTypeError('reduce_no_initial', []); | |
| 926 } | |
| 927 | |
| 928 for (; i >= 0; i--) { | |
| 929 var element = this[i]; | |
| 930 if (!IS_UNDEFINED(element) || i in this) { | |
| 931 current = callback.call(null, current, element, i, this); | |
| 932 } | |
| 933 } | |
| 934 return current; | |
| 935 } | |
| 936 | |
| 937 | |
| 882 // ------------------------------------------------------------------- | 938 // ------------------------------------------------------------------- |
| 883 | 939 |
| 884 | 940 |
| 885 function UpdateFunctionLengths(lengths) { | 941 function UpdateFunctionLengths(lengths) { |
| 886 for (var key in lengths) { | 942 for (var key in lengths) { |
| 887 %FunctionSetLength(this[key], lengths[key]); | 943 %FunctionSetLength(this[key], lengths[key]); |
| 888 } | 944 } |
| 889 } | 945 } |
| 890 | 946 |
| 891 | 947 |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 910 "unshift", ArrayUnshift, | 966 "unshift", ArrayUnshift, |
| 911 "slice", ArraySlice, | 967 "slice", ArraySlice, |
| 912 "splice", ArraySplice, | 968 "splice", ArraySplice, |
| 913 "sort", ArraySort, | 969 "sort", ArraySort, |
| 914 "filter", ArrayFilter, | 970 "filter", ArrayFilter, |
| 915 "forEach", ArrayForEach, | 971 "forEach", ArrayForEach, |
| 916 "some", ArraySome, | 972 "some", ArraySome, |
| 917 "every", ArrayEvery, | 973 "every", ArrayEvery, |
| 918 "map", ArrayMap, | 974 "map", ArrayMap, |
| 919 "indexOf", ArrayIndexOf, | 975 "indexOf", ArrayIndexOf, |
| 920 "lastIndexOf", ArrayLastIndexOf | 976 "lastIndexOf", ArrayLastIndexOf, |
| 977 "reduce", ArrayReduce, | |
| 978 "reduceRight", ArrayReduceRight | |
| 921 )); | 979 )); |
| 922 | 980 |
| 923 // Manipulate the length of some of the functions to meet | 981 // Manipulate the length of some of the functions to meet |
| 924 // expectations set by ECMA-262 or Mozilla. | 982 // expectations set by ECMA-262 or Mozilla. |
| 925 UpdateFunctionLengths({ | 983 UpdateFunctionLengths({ |
| 926 ArrayFilter: 1, | 984 ArrayFilter: 1, |
| 927 ArrayForEach: 1, | 985 ArrayForEach: 1, |
| 928 ArraySome: 1, | 986 ArraySome: 1, |
| 929 ArrayEvery: 1, | 987 ArrayEvery: 1, |
| 930 ArrayMap: 1, | 988 ArrayMap: 1, |
| 931 ArrayIndexOf: 1, | 989 ArrayIndexOf: 1, |
| 932 ArrayLastIndexOf: 1, | 990 ArrayLastIndexOf: 1, |
| 933 ArrayPush: 1 | 991 ArrayPush: 1, |
| 992 ArrayReduce: 1, | |
| 993 ArrayReduceRight: 1 | |
| 934 }); | 994 }); |
| 935 } | 995 } |
| 936 | 996 |
| 937 | 997 |
| 938 SetupArray(); | 998 SetupArray(); |
| OLD | NEW |