OLD | NEW |
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 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/compiler.h" | 7 #include "src/compiler.h" |
8 #include "src/interpreter/bytecode-array-iterator.h" | 8 #include "src/interpreter/bytecode-array-iterator.h" |
9 #include "src/interpreter/bytecode-generator.h" | 9 #include "src/interpreter/bytecode-generator.h" |
10 #include "src/interpreter/interpreter.h" | 10 #include "src/interpreter/interpreter.h" |
(...skipping 727 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
738 ExpectedSnippet<Handle<Object>> snippets[] = { | 738 ExpectedSnippet<Handle<Object>> snippets[] = { |
739 {"function f() { if (0) { return 1; } else { return -1; } } f()", | 739 {"function f() { if (0) { return 1; } else { return -1; } } f()", |
740 0, | 740 0, |
741 1, | 741 1, |
742 14, | 742 14, |
743 {B(LdaZero), // | 743 {B(LdaZero), // |
744 B(ToBoolean), // | 744 B(ToBoolean), // |
745 B(JumpIfFalse), U8(7), // | 745 B(JumpIfFalse), U8(7), // |
746 B(LdaSmi8), U8(1), // | 746 B(LdaSmi8), U8(1), // |
747 B(Return), // | 747 B(Return), // |
748 B(Jump), U8(5), // TODO(oth): Unreachable jump after return | 748 B(Jump), U8(5), // |
749 B(LdaSmi8), U8(-1), // | 749 B(LdaSmi8), U8(-1), // |
750 B(Return), // | 750 B(Return), // |
751 B(LdaUndefined), // | 751 B(LdaUndefined), // |
752 B(Return)}, // | 752 B(Return)}, // |
753 0, | 753 0, |
754 {unused, unused, unused, unused}}, | 754 {unused, unused, unused, unused}}, |
755 {"function f() { if ('lucky') { return 1; } else { return -1; } } f();", | 755 {"function f() { if ('lucky') { return 1; } else { return -1; } } f();", |
756 0, | 756 0, |
757 1, | 757 1, |
758 15, | 758 15, |
759 {B(LdaConstant), U8(0), // | 759 {B(LdaConstant), U8(0), // |
760 B(ToBoolean), // | 760 B(ToBoolean), // |
761 B(JumpIfFalse), U8(7), // | 761 B(JumpIfFalse), U8(7), // |
762 B(LdaSmi8), U8(1), // | 762 B(LdaSmi8), U8(1), // |
763 B(Return), // | 763 B(Return), // |
764 B(Jump), U8(5), // TODO(oth): Unreachable jump after return | 764 B(Jump), U8(5), // |
765 B(LdaSmi8), U8(-1), // | 765 B(LdaSmi8), U8(-1), // |
766 B(Return), // | 766 B(Return), // |
767 B(LdaUndefined), // | 767 B(LdaUndefined), // |
768 B(Return)}, // | 768 B(Return)}, // |
769 1, | 769 1, |
770 {helper.factory()->NewStringFromStaticChars("lucky"), unused, unused, | 770 {helper.factory()->NewStringFromStaticChars("lucky"), unused, unused, |
771 unused}}, | 771 unused}}, |
772 {"function f() { if (false) { return 1; } else { return -1; } } f();", | 772 {"function f() { if (false) { return 1; } else { return -1; } } f();", |
773 0, | 773 0, |
774 1, | 774 1, |
775 13, | 775 13, |
776 {B(LdaFalse), // | 776 {B(LdaFalse), // |
777 B(JumpIfFalse), U8(7), // | 777 B(JumpIfFalse), U8(7), // |
778 B(LdaSmi8), U8(1), // | 778 B(LdaSmi8), U8(1), // |
779 B(Return), // | 779 B(Return), // |
780 B(Jump), U8(5), // TODO(oth): Unreachable jump after return | 780 B(Jump), U8(5), // |
781 B(LdaSmi8), U8(-1), // | 781 B(LdaSmi8), U8(-1), // |
782 B(Return), // | 782 B(Return), // |
783 B(LdaUndefined), // | 783 B(LdaUndefined), // |
784 B(Return)}, // | 784 B(Return)}, // |
785 0, | 785 0, |
786 {unused, unused, unused, unused}}, | 786 {unused, unused, unused, unused}}, |
787 {"function f(a) { if (a <= 0) { return 200; } else { return -200; } }" | 787 {"function f(a) { if (a <= 0) { return 200; } else { return -200; } }" |
788 "f(99);", | 788 "f(99);", |
789 kPointerSize, | 789 kPointerSize, |
790 2, | 790 2, |
791 19, | 791 19, |
792 {B(Ldar), R(helper.kLastParamIndex), // | 792 {B(Ldar), R(helper.kLastParamIndex), // |
793 B(Star), R(0), // | 793 B(Star), R(0), // |
794 B(LdaZero), // | 794 B(LdaZero), // |
795 B(TestLessThanOrEqual), R(0), // | 795 B(TestLessThanOrEqual), R(0), // |
796 B(JumpIfFalse), U8(7), // | 796 B(JumpIfFalse), U8(7), // |
797 B(LdaConstant), U8(0), // | 797 B(LdaConstant), U8(0), // |
798 B(Return), // | 798 B(Return), // |
799 B(Jump), U8(5), // TODO(oth): Unreachable jump after return | 799 B(Jump), U8(5), // |
800 B(LdaConstant), U8(1), // | 800 B(LdaConstant), U8(1), // |
801 B(Return), // | 801 B(Return), // |
802 B(LdaUndefined), // | 802 B(LdaUndefined), // |
803 B(Return)}, // | 803 B(Return)}, // |
804 2, | 804 2, |
805 {helper.factory()->NewNumberFromInt(200), | 805 {helper.factory()->NewNumberFromInt(200), |
806 helper.factory()->NewNumberFromInt(-200), unused, unused}}, | 806 helper.factory()->NewNumberFromInt(-200), unused, unused}}, |
807 {"function f(a, b) { if (a in b) { return 200; } }" | 807 {"function f(a, b) { if (a in b) { return 200; } }" |
808 "f('prop', { prop: 'yes'});", | 808 "f('prop', { prop: 'yes'});", |
809 kPointerSize, | 809 kPointerSize, |
810 3, | 810 3, |
811 17, | 811 15, |
812 {B(Ldar), R(helper.kLastParamIndex - 1), // | 812 {B(Ldar), R(helper.kLastParamIndex - 1), // |
813 B(Star), R(0), // | 813 B(Star), R(0), // |
814 B(Ldar), R(helper.kLastParamIndex), // | 814 B(Ldar), R(helper.kLastParamIndex), // |
815 B(TestIn), R(0), // | 815 B(TestIn), R(0), // |
816 B(JumpIfFalse), U8(7), // | 816 B(JumpIfFalse), U8(5), // |
817 B(LdaConstant), U8(0), // | 817 B(LdaConstant), U8(0), // |
818 B(Return), // | 818 B(Return), // |
819 B(Jump), U8(2), // TODO(oth): Unreachable jump after return | 819 B(LdaUndefined), // |
820 B(LdaUndefined), // | 820 B(Return)}, // |
821 B(Return)}, // | |
822 1, | 821 1, |
823 {helper.factory()->NewNumberFromInt(200), unused, unused, unused}}, | 822 {helper.factory()->NewNumberFromInt(200), unused, unused, unused}}, |
824 {"function f(z) { var a = 0; var b = 0; if (a === 0.01) { " | 823 {"function f(z) { var a = 0; var b = 0; if (a === 0.01) { " |
825 #define X "b = a; a = b; " | 824 #define X "b = a; a = b; " |
826 X X X X X X X X X X X X X X X X X X X X X X X X | 825 X X X X X X X X X X X X X X X X X X X X X X X X |
827 #undef X | 826 #undef X |
828 " return 200; } else { return -200; } } f(0.001)", | 827 " return 200; } else { return -200; } } f(0.001)", |
829 3 * kPointerSize, | 828 3 * kPointerSize, |
830 2, | 829 2, |
831 218, | 830 218, |
832 {B(LdaZero), // | 831 {B(LdaZero), // |
833 B(Star), R(0), // | 832 B(Star), R(0), // |
834 B(LdaZero), // | 833 B(LdaZero), // |
835 B(Star), R(1), // | 834 B(Star), R(1), // |
836 B(Ldar), R(0), // | 835 B(Ldar), R(0), // |
837 B(Star), R(2), // | 836 B(Star), R(2), // |
838 B(LdaConstant), U8(0), // | 837 B(LdaConstant), U8(0), // |
839 B(TestEqualStrict), R(2), // | 838 B(TestEqualStrict), R(2), // |
840 B(JumpIfFalseConstant), U8(2), // | 839 B(JumpIfFalseConstant), U8(2), // |
841 #define X B(Ldar), R(0), B(Star), R(1), B(Ldar), R(1), B(Star), R(0), | 840 #define X B(Ldar), R(0), B(Star), R(1), B(Ldar), R(1), B(Star), R(0), |
842 X X X X X X X X X X X X X X X X X X X X X X X X | 841 X X X X X X X X X X X X X X X X X X X X X X X X |
843 #undef X | 842 #undef X |
844 B(LdaConstant), | 843 B(LdaConstant), U8(1), // |
845 U8(1), // | |
846 B(Return), // | 844 B(Return), // |
847 B(Jump), U8(5), // TODO(oth): Unreachable jump after return | 845 B(Jump), U8(5), // |
848 B(LdaConstant), U8(3), // | 846 B(LdaConstant), U8(3), // |
849 B(Return), // | 847 B(Return), // |
850 B(LdaUndefined), // | 848 B(LdaUndefined), // |
851 B(Return)}, // | 849 B(Return)}, // |
852 4, | 850 4, |
853 {helper.factory()->NewHeapNumber(0.01), | 851 {helper.factory()->NewHeapNumber(0.01), |
854 helper.factory()->NewNumberFromInt(200), | 852 helper.factory()->NewNumberFromInt(200), |
855 helper.factory()->NewNumberFromInt(199), | 853 helper.factory()->NewNumberFromInt(199), |
856 helper.factory()->NewNumberFromInt(-200)}}, | 854 helper.factory()->NewNumberFromInt(-200)}}, |
857 {"function f(a, b) {\n" | 855 {"function f(a, b) {\n" |
858 " if (a == b) { return 1; }\n" | 856 " if (a == b) { return 1; }\n" |
859 " if (a === b) { return 1; }\n" | 857 " if (a === b) { return 1; }\n" |
860 " if (a < b) { return 1; }\n" | 858 " if (a < b) { return 1; }\n" |
861 " if (a > b) { return 1; }\n" | 859 " if (a > b) { return 1; }\n" |
862 " if (a <= b) { return 1; }\n" | 860 " if (a <= b) { return 1; }\n" |
863 " if (a >= b) { return 1; }\n" | 861 " if (a >= b) { return 1; }\n" |
864 " if (a in b) { return 1; }\n" | 862 " if (a in b) { return 1; }\n" |
865 " if (a instanceof b) { return 1; }\n" | 863 " if (a instanceof b) { return 1; }\n" |
866 " /* if (a != b) { return 1; } */" // TODO(oth) Ast visitor yields | 864 " /* if (a != b) { return 1; } */" // TODO(oth) Ast visitor yields |
867 " /* if (a !== b) { return 1; } */" // UNARY NOT, rather than !=/!==. | 865 " /* if (a !== b) { return 1; } */" // UNARY NOT, rather than !=/!==. |
868 " return 0;\n" | 866 " return 0;\n" |
869 "} f(1, 1);", | 867 "} f(1, 1);", |
870 kPointerSize, | 868 kPointerSize, |
871 3, | 869 3, |
872 122, | 870 106, |
873 { | 871 { |
874 #define IF_CONDITION_RETURN(condition) \ | 872 #define IF_CONDITION_RETURN(condition) \ |
875 B(Ldar), R(helper.kLastParamIndex - 1), \ | 873 B(Ldar), R(helper.kLastParamIndex - 1), \ |
876 B(Star), R(0), \ | 874 B(Star), R(0), \ |
877 B(Ldar), R(helper.kLastParamIndex), \ | 875 B(Ldar), R(helper.kLastParamIndex), \ |
878 B(condition), R(0), \ | 876 B(condition), R(0), \ |
879 B(JumpIfFalse), U8(7), \ | 877 B(JumpIfFalse), U8(5), \ |
880 B(LdaSmi8), U8(1), \ | 878 B(LdaSmi8), U8(1), \ |
881 B(Return), \ | 879 B(Return), |
882 B(Jump), U8(2), | |
883 IF_CONDITION_RETURN(TestEqual) // | 880 IF_CONDITION_RETURN(TestEqual) // |
884 IF_CONDITION_RETURN(TestEqualStrict) // | 881 IF_CONDITION_RETURN(TestEqualStrict) // |
885 IF_CONDITION_RETURN(TestLessThan) // | 882 IF_CONDITION_RETURN(TestLessThan) // |
886 IF_CONDITION_RETURN(TestGreaterThan) // | 883 IF_CONDITION_RETURN(TestGreaterThan) // |
887 IF_CONDITION_RETURN(TestLessThanOrEqual) // | 884 IF_CONDITION_RETURN(TestLessThanOrEqual) // |
888 IF_CONDITION_RETURN(TestGreaterThanOrEqual) // | 885 IF_CONDITION_RETURN(TestGreaterThanOrEqual) // |
889 IF_CONDITION_RETURN(TestIn) // | 886 IF_CONDITION_RETURN(TestIn) // |
890 IF_CONDITION_RETURN(TestInstanceOf) // | 887 IF_CONDITION_RETURN(TestInstanceOf) // |
891 #undef IF_CONDITION_RETURN | 888 #undef IF_CONDITION_RETURN |
892 B(LdaZero), // | 889 B(LdaZero), // |
893 B(Return)}, // | 890 B(Return)}, // |
894 0, | 891 0, |
895 {unused, unused, unused, unused}}, | 892 {unused, unused, unused, unused}}, |
896 }; | 893 }; |
897 | 894 |
898 for (size_t i = 0; i < arraysize(snippets); i++) { | 895 for (size_t i = 0; i < arraysize(snippets); i++) { |
899 Handle<BytecodeArray> bytecode_array = | 896 Handle<BytecodeArray> bytecode_array = |
900 helper.MakeBytecode(snippets[i].code_snippet, helper.kFunctionName); | 897 helper.MakeBytecode(snippets[i].code_snippet, helper.kFunctionName); |
901 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 898 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
902 } | 899 } |
903 } | 900 } |
904 | 901 |
905 | 902 |
| 903 TEST(BasicLoops) { |
| 904 InitializedHandleScope handle_scope; |
| 905 BytecodeGeneratorHelper helper; |
| 906 |
| 907 ExpectedSnippet<int> snippets[] = { |
| 908 {"var x = 0;" |
| 909 "var y = 1;" |
| 910 "while (x < 10) {" |
| 911 " y = y * 10;" |
| 912 " x = x + 1;" |
| 913 "}" |
| 914 "return y;", |
| 915 3 * kPointerSize, |
| 916 1, |
| 917 42, |
| 918 { |
| 919 B(LdaZero), // |
| 920 B(Star), R(0), // |
| 921 B(LdaSmi8), U8(1), // |
| 922 B(Star), R(1), // |
| 923 B(Jump), U8(22), // |
| 924 B(Ldar), R(1), // |
| 925 B(Star), R(2), // |
| 926 B(LdaSmi8), U8(10), // |
| 927 B(Mul), R(2), // |
| 928 B(Star), R(1), // |
| 929 B(Ldar), R(0), // |
| 930 B(Star), R(2), // |
| 931 B(LdaSmi8), U8(1), // |
| 932 B(Add), R(2), // |
| 933 B(Star), R(0), // |
| 934 B(Ldar), R(0), // |
| 935 B(Star), R(2), // |
| 936 B(LdaSmi8), U8(10), // |
| 937 B(TestLessThan), R(2), // |
| 938 B(JumpIfTrue), U8(-28), // |
| 939 B(Ldar), R(1), // |
| 940 B(Return), // |
| 941 }, |
| 942 0}, |
| 943 {"var i = 0;" |
| 944 "while(true) {" |
| 945 " if (i < 0) continue;" |
| 946 " if (i == 3) break;" |
| 947 " if (i == 4) break;" |
| 948 " if (i == 10) continue;" |
| 949 " if (i == 5) break;" |
| 950 " i = i + 1;" |
| 951 "}" |
| 952 "return i;", |
| 953 2 * kPointerSize, |
| 954 1, |
| 955 80, |
| 956 { |
| 957 B(LdaZero), // |
| 958 B(Star), R(0), // |
| 959 B(Jump), U8(71), // |
| 960 B(Ldar), R(0), // |
| 961 B(Star), R(1), // |
| 962 B(LdaZero), // |
| 963 B(TestLessThan), R(1), // |
| 964 B(JumpIfFalse), U8(4), // |
| 965 B(Jump), U8(60), // |
| 966 B(Ldar), R(0), // |
| 967 B(Star), R(1), // |
| 968 B(LdaSmi8), U8(3), // |
| 969 B(TestEqual), R(1), // |
| 970 B(JumpIfFalse), U8(4), // |
| 971 B(Jump), U8(51), // |
| 972 B(Ldar), R(0), // |
| 973 B(Star), R(1), // |
| 974 B(LdaSmi8), U8(4), // |
| 975 B(TestEqual), R(1), // |
| 976 B(JumpIfFalse), U8(4), // |
| 977 B(Jump), U8(39), // |
| 978 B(Ldar), R(0), // |
| 979 B(Star), R(1), // |
| 980 B(LdaSmi8), U8(10), // |
| 981 B(TestEqual), R(1), // |
| 982 B(JumpIfFalse), U8(4), // |
| 983 B(Jump), U8(24), // |
| 984 B(Ldar), R(0), // |
| 985 B(Star), R(1), // |
| 986 B(LdaSmi8), U8(5), // |
| 987 B(TestEqual), R(1), // |
| 988 B(JumpIfFalse), U8(4), // |
| 989 B(Jump), U8(15), // |
| 990 B(Ldar), R(0), // |
| 991 B(Star), R(1), // |
| 992 B(LdaSmi8), U8(1), // |
| 993 B(Add), R(1), // |
| 994 B(Star), R(0), // |
| 995 B(LdaTrue), // |
| 996 B(JumpIfTrue), U8(-70), // |
| 997 B(Ldar), R(0), // |
| 998 B(Return) // |
| 999 }, |
| 1000 0}, |
| 1001 {"var x = 0; var y = 1;" |
| 1002 "do {" |
| 1003 " y = y * 10;" |
| 1004 " if (x == 5) break;" |
| 1005 " if (x == 6) continue;" |
| 1006 " x = x + 1;" |
| 1007 "} while (x < 10);" |
| 1008 "return y;", |
| 1009 3 * kPointerSize, |
| 1010 1, |
| 1011 64, |
| 1012 { |
| 1013 B(LdaZero), // |
| 1014 B(Star), R(0), // |
| 1015 B(LdaSmi8), U8(1), // |
| 1016 B(Star), R(1), // |
| 1017 B(Ldar), R(1), // |
| 1018 B(Star), R(2), // |
| 1019 B(LdaSmi8), U8(10), // |
| 1020 B(Mul), R(2), // |
| 1021 B(Star), R(1), // |
| 1022 B(Ldar), R(0), // |
| 1023 B(Star), R(2), // |
| 1024 B(LdaSmi8), U8(5), // |
| 1025 B(TestEqual), R(2), // |
| 1026 B(JumpIfFalse), U8(4), // |
| 1027 B(Jump), U8(34), // |
| 1028 B(Ldar), R(0), // |
| 1029 B(Star), R(2), // |
| 1030 B(LdaSmi8), U8(6), // |
| 1031 B(TestEqual), R(2), // |
| 1032 B(JumpIfFalse), U8(4), // |
| 1033 B(Jump), U8(12), // |
| 1034 B(Ldar), R(0), // |
| 1035 B(Star), R(2), // |
| 1036 B(LdaSmi8), U8(1), // |
| 1037 B(Add), R(2), // |
| 1038 B(Star), R(0), // |
| 1039 B(Ldar), R(0), // |
| 1040 B(Star), R(2), // |
| 1041 B(LdaSmi8), U8(10), // |
| 1042 B(TestLessThan), R(2), // |
| 1043 B(JumpIfTrue), U8(-52), // |
| 1044 B(Ldar), R(1), // |
| 1045 B(Return) // |
| 1046 }, |
| 1047 0}, |
| 1048 {"var x = 0; " |
| 1049 "for(;;) {" |
| 1050 " if (x == 1) break;" |
| 1051 " x = x + 1;" |
| 1052 "}", |
| 1053 2 * kPointerSize, |
| 1054 1, |
| 1055 29, |
| 1056 { |
| 1057 B(LdaZero), // |
| 1058 B(Star), R(0), // |
| 1059 B(Ldar), R(0), // |
| 1060 B(Star), R(1), // |
| 1061 B(LdaSmi8), // |
| 1062 U8(1), // |
| 1063 B(TestEqual), R(1), // |
| 1064 B(JumpIfFalse), U8(4), // |
| 1065 B(Jump), U8(14), // |
| 1066 B(Ldar), R(0), // |
| 1067 B(Star), R(1), // |
| 1068 B(LdaSmi8), U8(1), // |
| 1069 B(Add), R(1), // |
| 1070 B(Star), R(0), // |
| 1071 B(Jump), U8(-22), // |
| 1072 B(LdaUndefined), // |
| 1073 B(Return), // |
| 1074 }, |
| 1075 0}, |
| 1076 {"var u = 0;" |
| 1077 "for(var i = 0; i < 100; i = i + 1) {" |
| 1078 " u = u + 1;" |
| 1079 " continue;" |
| 1080 "}", |
| 1081 3 * kPointerSize, |
| 1082 1, |
| 1083 42, |
| 1084 { |
| 1085 B(LdaZero), // |
| 1086 B(Star), R(0), // |
| 1087 B(LdaZero), // |
| 1088 B(Star), R(1), // |
| 1089 B(Jump), U8(24), // |
| 1090 B(Ldar), R(0), // |
| 1091 B(Star), R(2), // |
| 1092 B(LdaSmi8), U8(1), // |
| 1093 B(Add), R(2), // |
| 1094 B(Star), R(0), // |
| 1095 B(Jump), U8(2), // |
| 1096 B(Ldar), R(1), // |
| 1097 B(Star), R(2), // |
| 1098 B(LdaSmi8), U8(1), // |
| 1099 B(Add), R(2), // |
| 1100 B(Star), R(1), // |
| 1101 B(Ldar), R(1), // |
| 1102 B(Star), R(2), // |
| 1103 B(LdaSmi8), U8(100), // |
| 1104 B(TestLessThan), R(2), // |
| 1105 B(JumpIfTrue), U8(-30), // |
| 1106 B(LdaUndefined), // |
| 1107 B(Return), // |
| 1108 }, |
| 1109 0}, |
| 1110 {"var i = 0;" |
| 1111 "while(true) {" |
| 1112 " while (i < 3) {" |
| 1113 " if (i == 2) break;" |
| 1114 " i = i + 1;" |
| 1115 " }" |
| 1116 " i = i + 1;" |
| 1117 " break;" |
| 1118 "}" |
| 1119 "return i;", |
| 1120 2 * kPointerSize, |
| 1121 1, |
| 1122 57, |
| 1123 { |
| 1124 B(LdaZero), // |
| 1125 B(Star), R(0), // |
| 1126 B(Jump), U8(48), // |
| 1127 B(Jump), U8(24), // |
| 1128 B(Ldar), R(0), // |
| 1129 B(Star), R(1), // |
| 1130 B(LdaSmi8), U8(2), // |
| 1131 B(TestEqual), R(1), // |
| 1132 B(JumpIfFalse), U8(4), // |
| 1133 B(Jump), U8(22), // |
| 1134 B(Ldar), R(0), // |
| 1135 B(Star), R(1), // |
| 1136 B(LdaSmi8), U8(1), // |
| 1137 B(Add), R(1), // |
| 1138 B(Star), R(0), // |
| 1139 B(Ldar), R(0), // |
| 1140 B(Star), R(1), // |
| 1141 B(LdaSmi8), U8(3), // |
| 1142 B(TestLessThan), R(1), // |
| 1143 B(JumpIfTrue), U8(-30), // |
| 1144 B(Ldar), R(0), // |
| 1145 B(Star), R(1), // |
| 1146 B(LdaSmi8), U8(1), // |
| 1147 B(Add), R(1), // |
| 1148 B(Star), R(0), // |
| 1149 B(Jump), U8(5), // |
| 1150 B(LdaTrue), // |
| 1151 B(JumpIfTrue), U8(-47), // |
| 1152 B(Ldar), R(0), // |
| 1153 B(Return), // |
| 1154 }, |
| 1155 0}, |
| 1156 }; |
| 1157 |
| 1158 for (size_t i = 0; i < arraysize(snippets); i++) { |
| 1159 Handle<BytecodeArray> bytecode_array = |
| 1160 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
| 1161 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
| 1162 } |
| 1163 } |
| 1164 |
906 } // namespace interpreter | 1165 } // namespace interpreter |
907 } // namespace internal | 1166 } // namespace internal |
908 } // namespace v8 | 1167 } // namespace v8 |
OLD | NEW |