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

Side by Side Diff: test/mjsunit/harmony/destructuring.js

Issue 1276273002: [es6] Fix parsing of expressions in parameter lists (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Whoops 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/preparser.h ('k') | 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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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 // Flags: --harmony-destructuring 5 // Flags: --harmony-destructuring
6 // Flags: --harmony-arrow-functions --harmony-rest-parameters 6 // Flags: --harmony-arrow-functions --harmony-rest-parameters
7 7
8 (function TestObjectLiteralPattern() { 8 (function TestObjectLiteralPattern() {
9 var { x : x, y : y } = { x : 1, y : 2 }; 9 var { x : x, y : y } = { x : 1, y : 2 };
10 assertEquals(1, x); 10 assertEquals(1, x);
(...skipping 704 matching lines...) Expand 10 before | Expand all | Expand 10 after
715 assertEquals(8, g1(7, {a : 6, b : 5})); 715 assertEquals(8, g1(7, {a : 6, b : 5}));
716 716
717 var g2 = ({c, d}, {a, b}) => { return c - d + a - b; }; 717 var g2 = ({c, d}, {a, b}) => { return c - d + a - b; };
718 assertEquals(7, g2({c : 7, d : 1}, {a : 6, b : 5})); 718 assertEquals(7, g2({c : 7, d : 1}, {a : 6, b : 5}));
719 719
720 var g3 = ([{a, b}]) => { return a - b; }; 720 var g3 = ([{a, b}]) => { return a - b; };
721 assertEquals(1, g3([{a : 6, b : 5}])); 721 assertEquals(1, g3([{a : 6, b : 5}]));
722 }()); 722 }());
723 723
724 724
725 (function TestExpressionsInParameters() {
726 function f1({a = eval(1)}) { return a }
727 assertEquals(1, f1({}));
728 function f2([x = eval(2)]) { return x }
729 assertEquals(2, f2([]));
730 function f3({[eval(7)]: x}) { return x }
731 assertEquals(3, f3({7: 3}));
732 // TODO(rossberg, caitp): Add tests for default parameters.
733 })();
734
735
725 (function TestParameterScoping() { 736 (function TestParameterScoping() {
726 var x = 1; 737 var x = 1;
727 738
728 function f1({a = x}) { var x = 2; return a; } 739 function f1({a = x}) { var x = 2; return a; }
729 assertEquals(1, f1({})); 740 assertEquals(1, f1({}));
730 function f2({a = x}) { function x() {}; return a; } 741 function f2({a = x}) { function x() {}; return a; }
731 assertEquals(1, f2({})); 742 assertEquals(1, f2({}));
732 function f3({a = x}) { 'use strict'; let x = 2; return a; } 743 function f3({a = x}) { 'use strict'; let x = 2; return a; }
733 assertEquals(1, f3({})); 744 assertEquals(1, f3({}));
734 function f4({a = x}) { 'use strict'; const x = 2; return a; } 745 function f4({a = x}) { 'use strict'; const x = 2; return a; }
735 assertEquals(1, f4({})); 746 assertEquals(1, f4({}));
736 function f5({a = x}) { 'use strict'; function x() {}; return a; } 747 function f5({a = x}) { 'use strict'; function x() {}; return a; }
737 assertEquals(1, f5({})); 748 assertEquals(1, f5({}));
738 // TODO(rossberg): Apparently, eval in default expressions is not working yet. 749 function f6({a = eval("x")}) { var x; return a; }
739 // function f6({a = eval("x")}) { var x; return a; } 750 assertEquals(1, f6({}));
740 // assertEquals(1, f6({})); 751 function f61({a = eval("x")}) { 'use strict'; var x; return a; }
741 // function f61({a = eval("x")}) { 'use strict'; var x; return a; } 752 assertEquals(1, f61({}));
742 // assertEquals(1, f61({})); 753 function f62({a = eval("'use strict'; x")}) { var x; return a; }
743 // function f62({a = eval("'use strict'; x")}) { var x; return a; } 754 assertEquals(1, f62({}));
744 // assertEquals(1, f62({}));
745 function f7({a = function() { return x }}) { var x; return a(); } 755 function f7({a = function() { return x }}) { var x; return a(); }
746 assertEquals(1, f7({})); 756 assertEquals(1, f7({}));
747 function f8({a = () => x}) { var x; return a(); } 757 function f8({a = () => x}) { var x; return a(); }
748 assertEquals(1, f8({})); 758 assertEquals(1, f8({}));
749 // function f9({a = () => eval("x")}) { var x; return a(); } 759 function f9({a = () => eval("x")}) { var x; return a(); }
750 // assertEquals(1, f9({})); 760 assertEquals(1, f9({}));
751 // function f91({a = () => eval("x")}) { 'use strict'; var x; return a(); } 761 function f91({a = () => eval("x")}) { 'use strict'; var x; return a(); }
752 // assertEquals(1, f91({})); 762 assertEquals(1, f91({}));
753 // function f92({a = () => { 'use strict'; return eval("x") }}) { var x; retur n a(); } 763 function f92({a = () => { 'use strict'; return eval("x") }}) { var x; return a (); }
754 // assertEquals(1, f92({})); 764 assertEquals(1, f92({}));
755 // function f93({a = () => eval("'use strict'; x")}) { var x; return a(); } 765 function f93({a = () => eval("'use strict'; x")}) { var x; return a(); }
756 // assertEquals(1, f93({})); 766 assertEquals(1, f93({}));
757 767
758 var g1 = ({a = x}) => { var x = 2; return a; }; 768 var g1 = ({a = x}) => { var x = 2; return a; };
759 assertEquals(1, g1({})); 769 assertEquals(1, g1({}));
760 var g2 = ({a = x}) => { function x() {}; return a; }; 770 var g2 = ({a = x}) => { function x() {}; return a; };
761 assertEquals(1, g2({})); 771 assertEquals(1, g2({}));
762 var g3 = ({a = x}) => { 'use strict'; let x = 2; return a; }; 772 var g3 = ({a = x}) => { 'use strict'; let x = 2; return a; };
763 assertEquals(1, g3({})); 773 assertEquals(1, g3({}));
764 var g4 = ({a = x}) => { 'use strict'; const x = 2; return a; }; 774 var g4 = ({a = x}) => { 'use strict'; const x = 2; return a; };
765 assertEquals(1, g4({})); 775 assertEquals(1, g4({}));
766 var g5 = ({a = x}) => { 'use strict'; function x() {}; return a; }; 776 var g5 = ({a = x}) => { 'use strict'; function x() {}; return a; };
767 assertEquals(1, g5({})); 777 assertEquals(1, g5({}));
768 // var g6 = ({a = eval("x")}) => { var x; return a; }; 778 var g6 = ({a = eval("x")}) => { var x; return a; };
769 // assertEquals(1, g6({})); 779 assertEquals(1, g6({}));
770 // var g61 = ({a = eval("x")}) => { 'use strict'; var x; return a; }; 780 var g61 = ({a = eval("x")}) => { 'use strict'; var x; return a; };
771 // assertEquals(1, g61({})); 781 assertEquals(1, g61({}));
772 // var g62 = ({a = eval("'use strict'; x")}) => { var x; return a; }; 782 var g62 = ({a = eval("'use strict'; x")}) => { var x; return a; };
773 // assertEquals(1, g62({})); 783 assertEquals(1, g62({}));
774 var g7 = ({a = function() { return x }}) => { var x; return a(); }; 784 var g7 = ({a = function() { return x }}) => { var x; return a(); };
775 assertEquals(1, g7({})); 785 assertEquals(1, g7({}));
776 var g8 = ({a = () => x}) => { var x; return a(); }; 786 var g8 = ({a = () => x}) => { var x; return a(); };
777 assertEquals(1, g8({})); 787 assertEquals(1, g8({}));
778 // var g9 = ({a = () => eval("x")}) => { var x; return a(); }; 788 var g9 = ({a = () => eval("x")}) => { var x; return a(); };
779 // assertEquals(1, g9({})); 789 assertEquals(1, g9({}));
780 // var g91 = ({a = () => eval("x")}) => { 'use strict'; var x; return a(); }; 790 var g91 = ({a = () => eval("x")}) => { 'use strict'; var x; return a(); };
781 // assertEquals(1, g91({})); 791 assertEquals(1, g91({}));
782 // var g92 = ({a = () => { 'use strict'; return eval("x") }}) => { var x; retu rn a(); }; 792 var g92 = ({a = () => { 'use strict'; return eval("x") }}) => { var x; return a(); };
783 // assertEquals(1, g92({})); 793 assertEquals(1, g92({}));
784 // var g93 = ({a = () => eval("'use strict'; x")}) => { var x; return a(); }; 794 var g93 = ({a = () => eval("'use strict'; x")}) => { var x; return a(); };
785 // assertEquals(1, g93({})); 795 assertEquals(1, g93({}));
786 796
787 var f11 = function f({x = f}) { var f; return x; } 797 var f11 = function f({x = f}) { var f; return x; }
788 assertSame(f11, f11({})); 798 assertSame(f11, f11({}));
789 var f12 = function f({x = f}) { function f() {}; return x; } 799 var f12 = function f({x = f}) { function f() {}; return x; }
790 assertSame(f12, f12({})); 800 assertSame(f12, f12({}));
791 var f13 = function f({x = f}) { 'use strict'; let f; return x; } 801 var f13 = function f({x = f}) { 'use strict'; let f; return x; }
792 assertSame(f13, f13({})); 802 assertSame(f13, f13({}));
793 var f14 = function f({x = f}) { 'use strict'; const f = 0; return x; } 803 var f14 = function f({x = f}) { 'use strict'; const f = 0; return x; }
794 assertSame(f14, f14({})); 804 assertSame(f14, f14({}));
795 var f15 = function f({x = f}) { 'use strict'; function f() {}; return x; } 805 var f15 = function f({x = f}) { 'use strict'; function f() {}; return x; }
796 assertSame(f15, f15({})); 806 assertSame(f15, f15({}));
797 var f16 = function f({f = 7, x = f}) { return x; } 807 var f16 = function f({f = 7, x = f}) { return x; }
798 assertSame(7, f16({})); 808 assertSame(7, f16({}));
799 809
800 var y = 'a'; 810 var y = 'a';
801 function f20({[y]: x}) { var y = 'b'; return x; } 811 function f20({[y]: x}) { var y = 'b'; return x; }
802 assertEquals(1, f20({a: 1, b: 2})); 812 assertEquals(1, f20({a: 1, b: 2}));
803 // function f21({[eval('y')]: x}) { var y = 'b'; return x; } 813 function f21({[eval('y')]: x}) { var y = 'b'; return x; }
804 // assertEquals(1, f21({a: 1, b: 2})); 814 assertEquals(1, f21({a: 1, b: 2}));
805 var g20 = ({[y]: x}) => { var y = 'b'; return x; }; 815 var g20 = ({[y]: x}) => { var y = 'b'; return x; };
806 assertEquals(1, g20({a: 1, b: 2})); 816 assertEquals(1, g20({a: 1, b: 2}));
807 // var g21 = ({[eval('y')]: x}) => { var y = 'b'; return x; }; 817 var g21 = ({[eval('y')]: x}) => { var y = 'b'; return x; };
808 // assertEquals(1, g21({a: 1, b: 2})); 818 assertEquals(1, g21({a: 1, b: 2}));
809 })(); 819 })();
810 820
811 821
812 (function TestParameterTDZ() { 822 (function TestParameterTDZ() {
813 function f1({a = x}, x) { return a } 823 function f1({a = x}, x) { return a }
814 assertThrows(() => f1({}, 4), ReferenceError); 824 assertThrows(() => f1({}, 4), ReferenceError);
815 assertEquals(4, f1({a: 4}, 5)); 825 assertEquals(4, f1({a: 4}, 5));
816 // TODO(rossberg): eval in default expressions is not working yet. 826 function f2({a = eval("x")}, x) { return a }
817 // function f2({a = eval("x")}, x) { return a } 827 assertThrows(() => f2({}, 4), ReferenceError);
818 // assertThrows(() => f2({}, 4), ReferenceError); 828 assertEquals(4, f2({a: 4}, 5));
819 // assertEquals(4, f2({a: 4}, 5)); 829 function f3({a = eval("x")}, x) { 'use strict'; return a }
820 // function f3({a = eval("x")}, x) { 'use strict'; return a } 830 assertThrows(() => f3({}, 4), ReferenceError);
821 // assertThrows(() => f3({}, 4), ReferenceError); 831 assertEquals(4, f3({a: 4}, 5));
822 // assertEquals(4, f3({a: 4}, 5)); 832 function f4({a = eval("'use strict'; x")}, x) { return a }
823 // function f4({a = eval("'use strict'; x")}, x) { return a } 833 assertThrows(() => f4({}, 4), ReferenceError);
824 // assertThrows(() => f4({}, 4), ReferenceError); 834 assertEquals(4, f4({a: 4}, 5));
825 // assertEquals(4, f4({a: 4}, 5));
826 835
827 function f5({a = () => x}, x) { return a() } 836 function f5({a = () => x}, x) { return a() }
828 assertEquals(4, f5({a: () => 4}, 5)); 837 assertEquals(4, f5({a: () => 4}, 5));
829 // TODO(rossberg): eval in default expressions is not working yet. 838 function f6({a = () => eval("x")}, x) { return a() }
830 // function f6({a = () => eval("x")}, x) { return a() } 839 assertEquals(4, f6({a: () => 4}, 5));
831 // assertEquals(4, f6({a: () => 4}, 5)); 840 function f7({a = () => eval("x")}, x) { 'use strict'; return a() }
832 // function f7({a = () => eval("x")}, x) { 'use strict'; return a() } 841 assertEquals(4, f7({a: () => 4}, 5));
833 // assertEquals(4, f7({a: () => 4}, 5)); 842 function f8({a = () => eval("'use strict'; x")}, x) { return a() }
834 // function f8({a = () => eval("'use strict'; x")}, x) { return a() } 843 assertEquals(4, f8({a: () => 4}, 5));
835 // assertEquals(4, f8({a: () => 4}, 5));
836 844
837 function f11({a = b}, {b}) { return a } 845 function f11({a = b}, {b}) { return a }
838 assertThrows(() => f11({}, {b: 4}), ReferenceError); 846 assertThrows(() => f11({}, {b: 4}), ReferenceError);
839 assertEquals(4, f11({a: 4}, {b: 5})); 847 assertEquals(4, f11({a: 4}, {b: 5}));
840 // function f12({a = eval("b")}, {b}) { return a } 848 function f12({a = eval("b")}, {b}) { return a }
841 // assertThrows(() => f12({}, {b: 4}), ReferenceError); 849 assertThrows(() => f12({}, {b: 4}), ReferenceError);
842 // assertEquals(4, f12({a: 4}, {b: 5})); 850 assertEquals(4, f12({a: 4}, {b: 5}));
843 // function f13({a = eval("b")}, {b}) { 'use strict'; return a } 851 function f13({a = eval("b")}, {b}) { 'use strict'; return a }
844 // assertThrows(() => f13({}, {b: 4}), ReferenceError); 852 assertThrows(() => f13({}, {b: 4}), ReferenceError);
845 // assertEquals(4, f13({a: 4}, {b: 5})); 853 assertEquals(4, f13({a: 4}, {b: 5}));
846 // function f14({a = eval("'use strict'; b")}, {b}) { return a } 854 function f14({a = eval("'use strict'; b")}, {b}) { return a }
847 // assertThrows(() => f14({}, {b: 4}), ReferenceError); 855 assertThrows(() => f14({}, {b: 4}), ReferenceError);
848 // assertEquals(4, f14({a: 4}, {b: 5})); 856 assertEquals(4, f14({a: 4}, {b: 5}));
849 857
850 function f15({a = () => b}, {b}) { return a() } 858 function f15({a = () => b}, {b}) { return a() }
851 assertEquals(4, f15({a: () => 4}, {b: 5})); 859 assertEquals(4, f15({a: () => 4}, {b: 5}));
852 // function f16({a = () => eval("b")}, {b}) { return a() } 860 function f16({a = () => eval("b")}, {b}) { return a() }
853 // assertEquals(4, f16({a: () => 4}, {b: 5})); 861 assertEquals(4, f16({a: () => 4}, {b: 5}));
854 // function f17({a = () => eval("b")}, {b}) { 'use strict'; return a() } 862 function f17({a = () => eval("b")}, {b}) { 'use strict'; return a() }
855 // assertEquals(4, f17({a: () => 4}, {b: 5})); 863 assertEquals(4, f17({a: () => 4}, {b: 5}));
856 // function f18({a = () => eval("'use strict'; b")}, {b}) { return a() } 864 function f18({a = () => eval("'use strict'; b")}, {b}) { return a() }
857 // assertEquals(4, f18({a: () => 4}, {b: 5})); 865 assertEquals(4, f18({a: () => 4}, {b: 5}));
858 866
859 // TODO(caitp): TDZ for rest parameters is not working yet. 867 // TODO(caitp): TDZ for rest parameters is not working yet.
860 // function f30({x = a}, ...a) { return x[0] } 868 // function f30({x = a}, ...a) { return x[0] }
861 // assertThrows(() => f30({}), ReferenceError); 869 // assertThrows(() => f30({}), ReferenceError);
862 // assertEquals(4, f30({a: [4]}, 5)); 870 // assertEquals(4, f30({a: [4]}, 5));
863 // function f31({x = eval("a")}, ...a) { return x[0] } 871 // function f31({x = eval("a")}, ...a) { return x[0] }
864 // assertThrows(() => f31({}), ReferenceError); 872 // assertThrows(() => f31({}), ReferenceError);
865 // assertEquals(4, f31({a: [4]}, 5)); 873 // assertEquals(4, f31({a: [4]}, 5));
866 // function f32({x = eval("a")}, ...a) { 'use strict'; return x[0] } 874 // function f32({x = eval("a")}, ...a) { 'use strict'; return x[0] }
867 // assertThrows(() => f32({}), ReferenceError); 875 // assertThrows(() => f32({}), ReferenceError);
868 // assertEquals(4, f32({a: [4]}, 5)); 876 // assertEquals(4, f32({a: [4]}, 5));
869 // function f33({x = eval("'use strict'; a")}, ...a) { return x[0] } 877 // function f33({x = eval("'use strict'; a")}, ...a) { return x[0] }
870 // assertThrows(() => f33({}), ReferenceError); 878 // assertThrows(() => f33({}), ReferenceError);
871 // assertEquals(4, f33({a: [4]}, 5)); 879 // assertEquals(4, f33({a: [4]}, 5));
872 880
873 function f34({x = function() { return a }}, ...a) { return x()[0] } 881 function f34({x = function() { return a }}, ...a) { return x()[0] }
874 assertEquals(4, f34({}, 4)); 882 assertEquals(4, f34({}, 4));
875 function f35({x = () => a}, ...a) { return x()[0] } 883 function f35({x = () => a}, ...a) { return x()[0] }
876 assertEquals(4, f35({}, 4)); 884 assertEquals(4, f35({}, 4));
877 // function f36({x = () => eval("a")}, ...a) { return x()[0] } 885 function f36({x = () => eval("a")}, ...a) { return x()[0] }
878 // assertEquals(4, f36({}, 4)); 886 assertEquals(4, f36({}, 4));
879 // function f37({x = () => eval("a")}, ...a) { 'use strict'; return x()[0] } 887 function f37({x = () => eval("a")}, ...a) { 'use strict'; return x()[0] }
880 // assertEquals(4, f37({}, 4)); 888 assertEquals(4, f37({}, 4));
881 // function f38({x = () => { 'use strict'; return eval("a") }}, ...a) { return x()[0] } 889 function f38({x = () => { 'use strict'; return eval("a") }}, ...a) { return x( )[0] }
882 // assertEquals(4, f38({}, 4)); 890 assertEquals(4, f38({}, 4));
883 // function f39({x = () => eval("'use strict'; a")}, ...a) { return x()[0] } 891 function f39({x = () => eval("'use strict'; a")}, ...a) { return x()[0] }
884 // assertEquals(4, f39({}, 4)); 892 assertEquals(4, f39({}, 4));
885 893
886 // var g30 = ({x = a}, ...a) => {}; 894 // var g30 = ({x = a}, ...a) => {};
887 // assertThrows(() => g30({}), ReferenceError); 895 // assertThrows(() => g30({}), ReferenceError);
888 // var g31 = ({x = eval("a")}, ...a) => {}; 896 // var g31 = ({x = eval("a")}, ...a) => {};
889 // assertThrows(() => g31({}), ReferenceError); 897 // assertThrows(() => g31({}), ReferenceError);
890 // var g32 = ({x = eval("a")}, ...a) => { 'use strict'; }; 898 // var g32 = ({x = eval("a")}, ...a) => { 'use strict'; };
891 // assertThrows(() => g32({}), ReferenceError); 899 // assertThrows(() => g32({}), ReferenceError);
892 // var g33 = ({x = eval("'use strict'; a")}, ...a) => {}; 900 // var g33 = ({x = eval("'use strict'; a")}, ...a) => {};
893 // assertThrows(() => g33({}), ReferenceError); 901 // assertThrows(() => g33({}), ReferenceError);
894 var g34 = ({x = function() { return a }}, ...a) => { return x()[0] }; 902 var g34 = ({x = function() { return a }}, ...a) => { return x()[0] };
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
928 function f4(x, {}) { x = 2; return arguments[0] } 936 function f4(x, {}) { x = 2; return arguments[0] }
929 assertEquals(7, f4(7, {})); 937 assertEquals(7, f4(7, {}));
930 function f5(x, ...a) { arguments[0] = 0; return x } 938 function f5(x, ...a) { arguments[0] = 0; return x }
931 assertEquals(6, f5(6, {})); 939 assertEquals(6, f5(6, {}));
932 function f6(x, ...a) { x = 2; return arguments[0] } 940 function f6(x, ...a) { x = 2; return arguments[0] }
933 assertEquals(6, f6(6, {})); 941 assertEquals(6, f6(6, {}));
934 function f7({a: x}) { x = 2; return arguments[0].a } 942 function f7({a: x}) { x = 2; return arguments[0].a }
935 assertEquals(5, f7({a: 5})); 943 assertEquals(5, f7({a: 5}));
936 function f8(x, ...a) { a = []; return arguments[1] } 944 function f8(x, ...a) { a = []; return arguments[1] }
937 assertEquals(6, f8(5, 6)); 945 assertEquals(6, f8(5, 6));
938 // TODO(caitp, rossberg): add cases for default parameters. 946 // TODO(rossberg, caitp): Add cases for default parameters.
939 }()); 947 }());
940 948
941 949
942 (function TestForInOfTDZ() { 950 (function TestForInOfTDZ() {
943 assertThrows("'use strict'; let x = {}; for (let [x, y] of {x});", ReferenceEr ror); 951 assertThrows("'use strict'; let x = {}; for (let [x, y] of {x});", ReferenceEr ror);
944 assertThrows("'use strict'; let x = {}; for (let [y, x] of {x});", ReferenceEr ror); 952 assertThrows("'use strict'; let x = {}; for (let [y, x] of {x});", ReferenceEr ror);
945 assertThrows("'use strict'; let x = {}; for (let [x, y] in {x});", ReferenceEr ror); 953 assertThrows("'use strict'; let x = {}; for (let [x, y] in {x});", ReferenceEr ror);
946 assertThrows("'use strict'; let x = {}; for (let [y, x] in {x});", ReferenceEr ror); 954 assertThrows("'use strict'; let x = {}; for (let [y, x] in {x});", ReferenceEr ror);
947 }()); 955 }());
OLDNEW
« no previous file with comments | « src/preparser.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698