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 771 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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(-5), // | 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), // TODO(oth): Unreachable jump after return |
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 17, |
812 {B(Ldar), R(-6), // | 812 {B(Ldar), R(helper.kLastParamIndex - 1), // |
813 B(Star), R(0), // | 813 B(Star), R(0), // |
814 B(Ldar), R(-5), // | 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(7), // |
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(Jump), U8(2), // TODO(oth): Unreachable jump after return |
820 B(LdaUndefined), // | 820 B(LdaUndefined), // |
821 B(Return)}, // | 821 B(Return)}, // |
822 1, | 822 1, |
823 {helper.factory()->NewNumberFromInt(200), unused, unused, unused}}, | 823 {helper.factory()->NewNumberFromInt(200), unused, unused, unused}}, |
824 {"function f(z) { var a = 0; var b = 0; if (a === 0.01) { " | 824 {"function f(z) { var a = 0; var b = 0; if (a === 0.01) { " |
825 #define X "b = a; a = b; " | 825 #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 | 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 |
827 #undef X | 827 #undef X |
828 " return 200; } else { return -200; } } f(0.001)", | 828 " return 200; } else { return -200; } } f(0.001)", |
829 3 * kPointerSize, | 829 3 * kPointerSize, |
830 2, | 830 2, |
831 218, | 831 218, |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
864 " if (a in b) { return 1; }\n" | 864 " if (a in b) { return 1; }\n" |
865 " if (a instanceof b) { return 1; }\n" | 865 " if (a instanceof b) { return 1; }\n" |
866 " /* if (a != b) { return 1; } */" // TODO(oth) Ast visitor yields | 866 " /* if (a != b) { return 1; } */" // TODO(oth) Ast visitor yields |
867 " /* if (a !== b) { return 1; } */" // UNARY NOT, rather than !=/!==. | 867 " /* if (a !== b) { return 1; } */" // UNARY NOT, rather than !=/!==. |
868 " return 0;\n" | 868 " return 0;\n" |
869 "} f(1, 1);", | 869 "} f(1, 1);", |
870 kPointerSize, | 870 kPointerSize, |
871 3, | 871 3, |
872 122, | 872 122, |
873 { | 873 { |
874 #define IF_CONDITION_RETURN(condition) \ | 874 #define IF_CONDITION_RETURN(condition) \ |
875 B(Ldar), R(-6), \ | 875 B(Ldar), R(helper.kLastParamIndex - 1), \ |
876 B(Star), R(0), \ | 876 B(Star), R(0), \ |
877 B(Ldar), R(-5), \ | 877 B(Ldar), R(helper.kLastParamIndex), \ |
878 B(condition), R(0), \ | 878 B(condition), R(0), \ |
879 B(JumpIfFalse), U8(7), \ | 879 B(JumpIfFalse), U8(7), \ |
880 B(LdaSmi8), U8(1), \ | 880 B(LdaSmi8), U8(1), \ |
881 B(Return), \ | 881 B(Return), \ |
882 B(Jump), U8(2), | 882 B(Jump), U8(2), |
883 IF_CONDITION_RETURN(TestEqual) // | 883 IF_CONDITION_RETURN(TestEqual) // |
884 IF_CONDITION_RETURN(TestEqualStrict) // | 884 IF_CONDITION_RETURN(TestEqualStrict) // |
885 IF_CONDITION_RETURN(TestLessThan) // | 885 IF_CONDITION_RETURN(TestLessThan) // |
886 IF_CONDITION_RETURN(TestGreaterThan) // | 886 IF_CONDITION_RETURN(TestGreaterThan) // |
887 IF_CONDITION_RETURN(TestLessThanOrEqual) // | 887 IF_CONDITION_RETURN(TestLessThanOrEqual) // |
888 IF_CONDITION_RETURN(TestGreaterThanOrEqual) // | 888 IF_CONDITION_RETURN(TestGreaterThanOrEqual) // |
889 IF_CONDITION_RETURN(TestIn) // | 889 IF_CONDITION_RETURN(TestIn) // |
890 IF_CONDITION_RETURN(TestInstanceOf) // | 890 IF_CONDITION_RETURN(TestInstanceOf) // |
891 #undef IF_CONDITION_RETURN | 891 #undef IF_CONDITION_RETURN |
892 B(LdaZero), // | 892 B(LdaZero), // |
893 B(Return)}, // | 893 B(Return)}, // |
894 0, | 894 0, |
895 {unused, unused, unused, unused}}, | 895 {unused, unused, unused, unused}}, |
896 }; | 896 }; |
897 | 897 |
898 for (size_t i = 0; i < arraysize(snippets); i++) { | 898 for (size_t i = 0; i < arraysize(snippets); i++) { |
899 Handle<BytecodeArray> bytecode_array = | 899 Handle<BytecodeArray> bytecode_array = |
900 helper.MakeBytecode(snippets[i].code_snippet, helper.kFunctionName); | 900 helper.MakeBytecode(snippets[i].code_snippet, helper.kFunctionName); |
901 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 901 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
902 } | 902 } |
903 } | 903 } |
904 | 904 |
905 | 905 |
906 } // namespace interpreter | 906 } // namespace interpreter |
907 } // namespace internal | 907 } // namespace internal |
908 } // namespace v8 | 908 } // namespace v8 |
OLD | NEW |