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

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

Issue 1300103005: [parser] disallow language mode directive in body of function with non-simple parameters (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: flag implications don't work in test suite? Created 5 years, 3 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 | « test/mjsunit/harmony/default-parameters.js ('k') | test/mjsunit/harmony/rest-params.js » ('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 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 --harmony-arrow-functions 5 // Flags: --harmony-destructuring --harmony-arrow-functions
6 // Flags: --harmony-default-parameters --harmony-rest-parameters 6 // Flags: --harmony-default-parameters --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 723 matching lines...) Expand 10 before | Expand all | Expand 10 after
734 })(); 734 })();
735 735
736 736
737 (function TestParameterScoping() { 737 (function TestParameterScoping() {
738 var x = 1; 738 var x = 1;
739 739
740 function f1({a = x}) { var x = 2; return a; } 740 function f1({a = x}) { var x = 2; return a; }
741 assertEquals(1, f1({})); 741 assertEquals(1, f1({}));
742 function f2({a = x}) { function x() {}; return a; } 742 function f2({a = x}) { function x() {}; return a; }
743 assertEquals(1, f2({})); 743 assertEquals(1, f2({}));
744 function f3({a = x}) { 'use strict'; let x = 2; return a; } 744 (function() {
745 assertEquals(1, f3({})); 745 'use strict';
746 function f4({a = x}) { 'use strict'; const x = 2; return a; } 746 function f3({a = x}) { let x = 2; return a; }
747 assertEquals(1, f4({})); 747 assertEquals(1, f3({}));
748 function f5({a = x}) { 'use strict'; function x() {}; return a; } 748 function f4({a = x}) { const x = 2; return a; }
749 assertEquals(1, f5({})); 749 assertEquals(1, f4({}));
750 function f5({a = x}) { function x() {}; return a; }
751 assertEquals(1, f5({}));
752 })();
750 function f6({a = eval("x")}) { var x; return a; } 753 function f6({a = eval("x")}) { var x; return a; }
751 assertEquals(1, f6({})); 754 assertEquals(1, f6({}));
752 function f61({a = eval("x")}) { 'use strict'; var x; return a; } 755 (function() {
753 assertEquals(1, f61({})); 756 'use strict';
757 function f61({a = eval("x")}) { var x; return a; }
758 assertEquals(1, f61({}));
759 })();
754 function f62({a = eval("'use strict'; x")}) { var x; return a; } 760 function f62({a = eval("'use strict'; x")}) { var x; return a; }
755 assertEquals(1, f62({})); 761 assertEquals(1, f62({}));
756 function f7({a = function() { return x }}) { var x; return a(); } 762 function f7({a = function() { return x }}) { var x; return a(); }
757 assertEquals(1, f7({})); 763 assertEquals(1, f7({}));
758 function f8({a = () => x}) { var x; return a(); } 764 function f8({a = () => x}) { var x; return a(); }
759 assertEquals(1, f8({})); 765 assertEquals(1, f8({}));
760 function f9({a = () => eval("x")}) { var x; return a(); } 766 function f9({a = () => eval("x")}) { var x; return a(); }
761 assertEquals(1, f9({})); 767 assertEquals(1, f9({}));
762 function f91({a = () => eval("x")}) { 'use strict'; var x; return a(); } 768 (function TestInitializedWithEvalArrowStrict() {
763 assertEquals(1, f91({})); 769 'use strict';
770 function f91({a = () => eval("x")}) { var x; return a(); }
771 assertEquals(1, f91({}));
772 })();
764 function f92({a = () => { 'use strict'; return eval("x") }}) { var x; return a (); } 773 function f92({a = () => { 'use strict'; return eval("x") }}) { var x; return a (); }
765 assertEquals(1, f92({})); 774 assertEquals(1, f92({}));
766 function f93({a = () => eval("'use strict'; x")}) { var x; return a(); } 775 function f93({a = () => eval("'use strict'; x")}) { var x; return a(); }
767 assertEquals(1, f93({})); 776 assertEquals(1, f93({}));
768 777
769 var g1 = ({a = x}) => { var x = 2; return a; }; 778 var g1 = ({a = x}) => { var x = 2; return a; };
770 assertEquals(1, g1({})); 779 assertEquals(1, g1({}));
771 var g2 = ({a = x}) => { function x() {}; return a; }; 780 var g2 = ({a = x}) => { function x() {}; return a; };
772 assertEquals(1, g2({})); 781 assertEquals(1, g2({}));
773 var g3 = ({a = x}) => { 'use strict'; let x = 2; return a; }; 782 (function() {
774 assertEquals(1, g3({})); 783 'use strict';
775 var g4 = ({a = x}) => { 'use strict'; const x = 2; return a; }; 784 var g3 = ({a = x}) => { let x = 2; return a; };
776 assertEquals(1, g4({})); 785 assertEquals(1, g3({}));
777 var g5 = ({a = x}) => { 'use strict'; function x() {}; return a; }; 786 var g4 = ({a = x}) => { const x = 2; return a; };
778 assertEquals(1, g5({})); 787 assertEquals(1, g4({}));
788 var g5 = ({a = x}) => { function x() {}; return a; };
789 assertEquals(1, g5({}));
790 })();
779 var g6 = ({a = eval("x")}) => { var x; return a; }; 791 var g6 = ({a = eval("x")}) => { var x; return a; };
780 assertEquals(1, g6({})); 792 assertEquals(1, g6({}));
781 var g61 = ({a = eval("x")}) => { 'use strict'; var x; return a; }; 793 (function() {
782 assertEquals(1, g61({})); 794 'use strict';
795 var g61 = ({a = eval("x")}) => { var x; return a; };
796 assertEquals(1, g61({}));
797 })();
783 var g62 = ({a = eval("'use strict'; x")}) => { var x; return a; }; 798 var g62 = ({a = eval("'use strict'; x")}) => { var x; return a; };
784 assertEquals(1, g62({})); 799 assertEquals(1, g62({}));
785 var g7 = ({a = function() { return x }}) => { var x; return a(); }; 800 var g7 = ({a = function() { return x }}) => { var x; return a(); };
786 assertEquals(1, g7({})); 801 assertEquals(1, g7({}));
787 var g8 = ({a = () => x}) => { var x; return a(); }; 802 var g8 = ({a = () => x}) => { var x; return a(); };
788 assertEquals(1, g8({})); 803 assertEquals(1, g8({}));
789 var g9 = ({a = () => eval("x")}) => { var x; return a(); }; 804 var g9 = ({a = () => eval("x")}) => { var x; return a(); };
790 assertEquals(1, g9({})); 805 assertEquals(1, g9({}));
791 var g91 = ({a = () => eval("x")}) => { 'use strict'; var x; return a(); }; 806 (function() {
792 assertEquals(1, g91({})); 807 'use strict';
793 var g92 = ({a = () => { 'use strict'; return eval("x") }}) => { var x; return a(); }; 808 var g91 = ({a = () => eval("x")}) => { var x; return a(); };
794 assertEquals(1, g92({})); 809 assertEquals(1, g91({}));
810 var g92 = ({a = () => { return eval("x") }}) => { var x; return a(); };
811 assertEquals(1, g92({}));
812 })();
795 var g93 = ({a = () => eval("'use strict'; x")}) => { var x; return a(); }; 813 var g93 = ({a = () => eval("'use strict'; x")}) => { var x; return a(); };
796 assertEquals(1, g93({})); 814 assertEquals(1, g93({}));
797 815
798 var f11 = function f({x = f}) { var f; return x; } 816 var f11 = function f({x = f}) { var f; return x; }
799 assertSame(f11, f11({})); 817 assertSame(f11, f11({}));
800 var f12 = function f({x = f}) { function f() {}; return x; } 818 var f12 = function f({x = f}) { function f() {}; return x; }
801 assertSame(f12, f12({})); 819 assertSame(f12, f12({}));
802 var f13 = function f({x = f}) { 'use strict'; let f; return x; } 820 (function() {
803 assertSame(f13, f13({})); 821 'use strict';
804 var f14 = function f({x = f}) { 'use strict'; const f = 0; return x; } 822 var f13 = function f({x = f}) { let f; return x; }
805 assertSame(f14, f14({})); 823 assertSame(f13, f13({}));
806 var f15 = function f({x = f}) { 'use strict'; function f() {}; return x; } 824 var f14 = function f({x = f}) { const f = 0; return x; }
807 assertSame(f15, f15({})); 825 assertSame(f14, f14({}));
826 var f15 = function f({x = f}) { function f() {}; return x; }
827 assertSame(f15, f15({}));
828 })();
808 var f16 = function f({f = 7, x = f}) { return x; } 829 var f16 = function f({f = 7, x = f}) { return x; }
809 assertSame(7, f16({})); 830 assertSame(7, f16({}));
810 831
811 var y = 'a'; 832 var y = 'a';
812 function f20({[y]: x}) { var y = 'b'; return x; } 833 function f20({[y]: x}) { var y = 'b'; return x; }
813 assertEquals(1, f20({a: 1, b: 2})); 834 assertEquals(1, f20({a: 1, b: 2}));
814 function f21({[eval('y')]: x}) { var y = 'b'; return x; } 835 function f21({[eval('y')]: x}) { var y = 'b'; return x; }
815 assertEquals(1, f21({a: 1, b: 2})); 836 assertEquals(1, f21({a: 1, b: 2}));
816 var g20 = ({[y]: x}) => { var y = 'b'; return x; }; 837 var g20 = ({[y]: x}) => { var y = 'b'; return x; };
817 assertEquals(1, g20({a: 1, b: 2})); 838 assertEquals(1, g20({a: 1, b: 2}));
818 var g21 = ({[eval('y')]: x}) => { var y = 'b'; return x; }; 839 var g21 = ({[eval('y')]: x}) => { var y = 'b'; return x; };
819 assertEquals(1, g21({a: 1, b: 2})); 840 assertEquals(1, g21({a: 1, b: 2}));
820 })(); 841 })();
821 842
822 843
823 (function TestParameterDestructuringTDZ() { 844 (function TestParameterDestructuringTDZ() {
824 function f1({a = x}, x) { return a } 845 function f1({a = x}, x) { return a }
825 assertThrows(() => f1({}, 4), ReferenceError); 846 assertThrows(() => f1({}, 4), ReferenceError);
826 assertEquals(4, f1({a: 4}, 5)); 847 assertEquals(4, f1({a: 4}, 5));
827 function f2({a = eval("x")}, x) { return a } 848 function f2({a = eval("x")}, x) { return a }
828 assertThrows(() => f2({}, 4), ReferenceError); 849 assertThrows(() => f2({}, 4), ReferenceError);
829 assertEquals(4, f2({a: 4}, 5)); 850 assertEquals(4, f2({a: 4}, 5));
830 function f3({a = eval("x")}, x) { 'use strict'; return a } 851 (function() {
831 assertThrows(() => f3({}, 4), ReferenceError); 852 'use strict';
832 assertEquals(4, f3({a: 4}, 5)); 853 function f3({a = eval("x")}, x) { return a }
854 assertThrows(() => f3({}, 4), ReferenceError);
855 assertEquals(4, f3({a: 4}, 5));
856 })();
833 function f4({a = eval("'use strict'; x")}, x) { return a } 857 function f4({a = eval("'use strict'; x")}, x) { return a }
834 assertThrows(() => f4({}, 4), ReferenceError); 858 assertThrows(() => f4({}, 4), ReferenceError);
835 assertEquals(4, f4({a: 4}, 5)); 859 assertEquals(4, f4({a: 4}, 5));
836 860
837 function f5({a = () => x}, x) { return a() } 861 function f5({a = () => x}, x) { return a() }
838 assertEquals(4, f5({a: () => 4}, 5)); 862 assertEquals(4, f5({a: () => 4}, 5));
839 function f6({a = () => eval("x")}, x) { return a() } 863 function f6({a = () => eval("x")}, x) { return a() }
840 assertEquals(4, f6({a: () => 4}, 5)); 864 assertEquals(4, f6({a: () => 4}, 5));
841 function f7({a = () => eval("x")}, x) { 'use strict'; return a() } 865 (function() {
842 assertEquals(4, f7({a: () => 4}, 5)); 866 'use strict';
867 function f7({a = () => eval("x")}, x) { return a() }
868 assertEquals(4, f7({a: () => 4}, 5));
869 })();
843 function f8({a = () => eval("'use strict'; x")}, x) { return a() } 870 function f8({a = () => eval("'use strict'; x")}, x) { return a() }
844 assertEquals(4, f8({a: () => 4}, 5)); 871 assertEquals(4, f8({a: () => 4}, 5));
845 872
846 function f11({a = b}, {b}) { return a } 873 function f11({a = b}, {b}) { return a }
847 assertThrows(() => f11({}, {b: 4}), ReferenceError); 874 assertThrows(() => f11({}, {b: 4}), ReferenceError);
848 assertEquals(4, f11({a: 4}, {b: 5})); 875 assertEquals(4, f11({a: 4}, {b: 5}));
849 function f12({a = eval("b")}, {b}) { return a } 876 function f12({a = eval("b")}, {b}) { return a }
850 assertThrows(() => f12({}, {b: 4}), ReferenceError); 877 assertThrows(() => f12({}, {b: 4}), ReferenceError);
851 assertEquals(4, f12({a: 4}, {b: 5})); 878 assertEquals(4, f12({a: 4}, {b: 5}));
852 function f13({a = eval("b")}, {b}) { 'use strict'; return a } 879 (function() {
853 assertThrows(() => f13({}, {b: 4}), ReferenceError); 880 'use strict';
854 assertEquals(4, f13({a: 4}, {b: 5})); 881 function f13({a = eval("b")}, {b}) { return a }
882 assertThrows(() => f13({}, {b: 4}), ReferenceError);
883 assertEquals(4, f13({a: 4}, {b: 5}));
884 })();
855 function f14({a = eval("'use strict'; b")}, {b}) { return a } 885 function f14({a = eval("'use strict'; b")}, {b}) { return a }
856 assertThrows(() => f14({}, {b: 4}), ReferenceError); 886 assertThrows(() => f14({}, {b: 4}), ReferenceError);
857 assertEquals(4, f14({a: 4}, {b: 5})); 887 assertEquals(4, f14({a: 4}, {b: 5}));
858 888
859 function f15({a = () => b}, {b}) { return a() } 889 function f15({a = () => b}, {b}) { return a() }
860 assertEquals(4, f15({a: () => 4}, {b: 5})); 890 assertEquals(4, f15({a: () => 4}, {b: 5}));
861 function f16({a = () => eval("b")}, {b}) { return a() } 891 function f16({a = () => eval("b")}, {b}) { return a() }
862 assertEquals(4, f16({a: () => 4}, {b: 5})); 892 assertEquals(4, f16({a: () => 4}, {b: 5}));
863 function f17({a = () => eval("b")}, {b}) { 'use strict'; return a() } 893 (function() {
864 assertEquals(4, f17({a: () => 4}, {b: 5})); 894 'use strict';
895 function f17({a = () => eval("b")}, {b}) { return a() }
896 assertEquals(4, f17({a: () => 4}, {b: 5}));
897 })();
865 function f18({a = () => eval("'use strict'; b")}, {b}) { return a() } 898 function f18({a = () => eval("'use strict'; b")}, {b}) { return a() }
866 assertEquals(4, f18({a: () => 4}, {b: 5})); 899 assertEquals(4, f18({a: () => 4}, {b: 5}));
867 900
868 // TODO(caitp): TDZ for rest parameters is not working yet. 901 // TODO(caitp): TDZ for rest parameters is not working yet.
869 // function f30({x = a}, ...a) { return x[0] } 902 // function f30({x = a}, ...a) { return x[0] }
870 // assertThrows(() => f30({}), ReferenceError); 903 // assertThrows(() => f30({}), ReferenceError);
871 // assertEquals(4, f30({a: [4]}, 5)); 904 // assertEquals(4, f30({a: [4]}, 5));
872 // function f31({x = eval("a")}, ...a) { return x[0] } 905 // function f31({x = eval("a")}, ...a) { return x[0] }
873 // assertThrows(() => f31({}), ReferenceError); 906 // assertThrows(() => f31({}), ReferenceError);
874 // assertEquals(4, f31({a: [4]}, 5)); 907 // assertEquals(4, f31({a: [4]}, 5));
875 // function f32({x = eval("a")}, ...a) { 'use strict'; return x[0] } 908 // function f32({x = eval("a")}, ...a) { 'use strict'; return x[0] }
876 // assertThrows(() => f32({}), ReferenceError); 909 // assertThrows(() => f32({}), ReferenceError);
877 // assertEquals(4, f32({a: [4]}, 5)); 910 // assertEquals(4, f32({a: [4]}, 5));
878 // function f33({x = eval("'use strict'; a")}, ...a) { return x[0] } 911 // function f33({x = eval("'use strict'; a")}, ...a) { return x[0] }
879 // assertThrows(() => f33({}), ReferenceError); 912 // assertThrows(() => f33({}), ReferenceError);
880 // assertEquals(4, f33({a: [4]}, 5)); 913 // assertEquals(4, f33({a: [4]}, 5));
881 914
882 function f34({x = function() { return a }}, ...a) { return x()[0] } 915 function f34({x = function() { return a }}, ...a) { return x()[0] }
883 assertEquals(4, f34({}, 4)); 916 assertEquals(4, f34({}, 4));
884 function f35({x = () => a}, ...a) { return x()[0] } 917 function f35({x = () => a}, ...a) { return x()[0] }
885 assertEquals(4, f35({}, 4)); 918 assertEquals(4, f35({}, 4));
886 function f36({x = () => eval("a")}, ...a) { return x()[0] } 919 function f36({x = () => eval("a")}, ...a) { return x()[0] }
887 assertEquals(4, f36({}, 4)); 920 assertEquals(4, f36({}, 4));
888 function f37({x = () => eval("a")}, ...a) { 'use strict'; return x()[0] } 921 (function() {
889 assertEquals(4, f37({}, 4)); 922 'use strict';
923 function f37({x = () => eval("a")}, ...a) { return x()[0] }
924 assertEquals(4, f37({}, 4));
925 })();
890 function f38({x = () => { 'use strict'; return eval("a") }}, ...a) { return x( )[0] } 926 function f38({x = () => { 'use strict'; return eval("a") }}, ...a) { return x( )[0] }
891 assertEquals(4, f38({}, 4)); 927 assertEquals(4, f38({}, 4));
892 function f39({x = () => eval("'use strict'; a")}, ...a) { return x()[0] } 928 function f39({x = () => eval("'use strict'; a")}, ...a) { return x()[0] }
893 assertEquals(4, f39({}, 4)); 929 assertEquals(4, f39({}, 4));
894 930
895 // var g30 = ({x = a}, ...a) => {}; 931 // var g30 = ({x = a}, ...a) => {};
896 // assertThrows(() => g30({}), ReferenceError); 932 // assertThrows(() => g30({}), ReferenceError);
897 // var g31 = ({x = eval("a")}, ...a) => {}; 933 // var g31 = ({x = eval("a")}, ...a) => {};
898 // assertThrows(() => g31({}), ReferenceError); 934 // assertThrows(() => g31({}), ReferenceError);
899 // var g32 = ({x = eval("a")}, ...a) => { 'use strict'; }; 935 // var g32 = ({x = eval("a")}, ...a) => { 'use strict'; };
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
962 assertEquals(1, (function({}, ...a) {}).length); 998 assertEquals(1, (function({}, ...a) {}).length);
963 assertEquals(1, (function({x}, {y} = {}) {}).length); 999 assertEquals(1, (function({x}, {y} = {}) {}).length);
964 assertEquals(1, (function({x}, {y} = {}, ...a) {}).length); 1000 assertEquals(1, (function({x}, {y} = {}, ...a) {}).length);
965 assertEquals(2, (function(x, {y}, {z} = {}) {}).length); 1001 assertEquals(2, (function(x, {y}, {z} = {}) {}).length);
966 assertEquals(2, (function({x}, {}, {z} = {}, ...a) {}).length); 1002 assertEquals(2, (function({x}, {}, {z} = {}, ...a) {}).length);
967 assertEquals(1, (function(x, {y} = {}, {z}) {}).length); 1003 assertEquals(1, (function(x, {y} = {}, {z}) {}).length);
968 assertEquals(1, (function({x}, {y} = {}, {z}, ...a) {}).length); 1004 assertEquals(1, (function({x}, {y} = {}, {z}, ...a) {}).length);
969 assertEquals(1, (function(x, {y} = {}, {z}, {v} = {}) {}).length); 1005 assertEquals(1, (function(x, {y} = {}, {z}, {v} = {}) {}).length);
970 assertEquals(1, (function({x}, {y} = {}, {z}, {v} = {}, ...a) {}).length); 1006 assertEquals(1, (function({x}, {y} = {}, {z}, {v} = {}, ...a) {}).length);
971 })(); 1007 })();
1008
1009
1010 (function TestDirectiveThrows() {
1011 "use strict";
1012
1013 assertThrows(function(){ eval("function({}){'use strict';}") }, SyntaxError);
1014 assertThrows(function(){ eval("({}) => {'use strict';}") }, SyntaxError);
1015 assertThrows(
1016 function(){ eval("(class{foo({}) {'use strict';}});") }, SyntaxError);
1017
1018 assertThrows(
1019 function(){ eval("function(a, {}){'use strict';}") }, SyntaxError);
1020 assertThrows(function(){ eval("(a, {}) => {'use strict';}") }, SyntaxError);
1021 assertThrows(
1022 function(){ eval("(class{foo(a, {}) {'use strict';}});") }, SyntaxError);
1023 })();
OLDNEW
« no previous file with comments | « test/mjsunit/harmony/default-parameters.js ('k') | test/mjsunit/harmony/rest-params.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698