| OLD | NEW |
| 1 // Copyright 2008 the V8 project authors. All rights reserved. | 1 // Copyright 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 661 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 672 v8::internal::ZoneScope zone_; | 672 v8::internal::ZoneScope zone_; |
| 673 v8::internal::StackGuard stack_guard_; | 673 v8::internal::StackGuard stack_guard_; |
| 674 }; | 674 }; |
| 675 | 675 |
| 676 | 676 |
| 677 static ArchRegExpMacroAssembler::Result Execute(Code* code, | 677 static ArchRegExpMacroAssembler::Result Execute(Code* code, |
| 678 String* input, | 678 String* input, |
| 679 int start_offset, | 679 int start_offset, |
| 680 const byte* input_start, | 680 const byte* input_start, |
| 681 const byte* input_end, | 681 const byte* input_end, |
| 682 int* captures, | 682 int* captures) { |
| 683 bool at_start) { | |
| 684 return NativeRegExpMacroAssembler::Execute( | 683 return NativeRegExpMacroAssembler::Execute( |
| 685 code, | 684 code, |
| 686 input, | 685 input, |
| 687 start_offset, | 686 start_offset, |
| 688 input_start, | 687 input_start, |
| 689 input_end, | 688 input_end, |
| 690 captures, | 689 captures); |
| 691 at_start); | |
| 692 } | 690 } |
| 693 | 691 |
| 694 | 692 |
| 695 TEST(MacroAssemblerNativeSuccess) { | 693 TEST(MacroAssemblerNativeSuccess) { |
| 696 v8::V8::Initialize(); | 694 v8::V8::Initialize(); |
| 697 ContextInitializer initializer; | 695 ContextInitializer initializer; |
| 698 | 696 |
| 699 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4); | 697 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4); |
| 700 | 698 |
| 701 m.Succeed(); | 699 m.Succeed(); |
| 702 | 700 |
| 703 Handle<String> source = Factory::NewStringFromAscii(CStrVector("")); | 701 Handle<String> source = Factory::NewStringFromAscii(CStrVector("")); |
| 704 Handle<Object> code_object = m.GetCode(source); | 702 Handle<Object> code_object = m.GetCode(source); |
| 705 Handle<Code> code = Handle<Code>::cast(code_object); | 703 Handle<Code> code = Handle<Code>::cast(code_object); |
| 706 | 704 |
| 707 int captures[4] = {42, 37, 87, 117}; | 705 int captures[4] = {42, 37, 87, 117}; |
| 708 Handle<String> input = Factory::NewStringFromAscii(CStrVector("foofoo")); | 706 Handle<String> input = Factory::NewStringFromAscii(CStrVector("foofoo")); |
| 709 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); | 707 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); |
| 710 const byte* start_adr = | 708 const byte* start_adr = |
| 711 reinterpret_cast<const byte*>(seq_input->GetCharsAddress()); | 709 reinterpret_cast<const byte*>(seq_input->GetCharsAddress()); |
| 712 | 710 |
| 713 NativeRegExpMacroAssembler::Result result = | 711 NativeRegExpMacroAssembler::Result result = |
| 714 Execute(*code, | 712 Execute(*code, |
| 715 *input, | 713 *input, |
| 716 0, | 714 0, |
| 717 start_adr, | 715 start_adr, |
| 718 start_adr + seq_input->length(), | 716 start_adr + seq_input->length(), |
| 719 captures, | 717 captures); |
| 720 true); | |
| 721 | 718 |
| 722 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); | 719 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); |
| 723 CHECK_EQ(-1, captures[0]); | 720 CHECK_EQ(-1, captures[0]); |
| 724 CHECK_EQ(-1, captures[1]); | 721 CHECK_EQ(-1, captures[1]); |
| 725 CHECK_EQ(-1, captures[2]); | 722 CHECK_EQ(-1, captures[2]); |
| 726 CHECK_EQ(-1, captures[3]); | 723 CHECK_EQ(-1, captures[3]); |
| 727 } | 724 } |
| 728 | 725 |
| 729 | 726 |
| 730 TEST(MacroAssemblerNativeSimple) { | 727 TEST(MacroAssemblerNativeSimple) { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 753 Handle<String> input = Factory::NewStringFromAscii(CStrVector("foofoo")); | 750 Handle<String> input = Factory::NewStringFromAscii(CStrVector("foofoo")); |
| 754 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); | 751 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); |
| 755 Address start_adr = seq_input->GetCharsAddress(); | 752 Address start_adr = seq_input->GetCharsAddress(); |
| 756 | 753 |
| 757 NativeRegExpMacroAssembler::Result result = | 754 NativeRegExpMacroAssembler::Result result = |
| 758 Execute(*code, | 755 Execute(*code, |
| 759 *input, | 756 *input, |
| 760 0, | 757 0, |
| 761 start_adr, | 758 start_adr, |
| 762 start_adr + input->length(), | 759 start_adr + input->length(), |
| 763 captures, | 760 captures); |
| 764 true); | |
| 765 | 761 |
| 766 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); | 762 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); |
| 767 CHECK_EQ(0, captures[0]); | 763 CHECK_EQ(0, captures[0]); |
| 768 CHECK_EQ(3, captures[1]); | 764 CHECK_EQ(3, captures[1]); |
| 769 CHECK_EQ(-1, captures[2]); | 765 CHECK_EQ(-1, captures[2]); |
| 770 CHECK_EQ(-1, captures[3]); | 766 CHECK_EQ(-1, captures[3]); |
| 771 | 767 |
| 772 input = Factory::NewStringFromAscii(CStrVector("barbarbar")); | 768 input = Factory::NewStringFromAscii(CStrVector("barbarbar")); |
| 773 seq_input = Handle<SeqAsciiString>::cast(input); | 769 seq_input = Handle<SeqAsciiString>::cast(input); |
| 774 start_adr = seq_input->GetCharsAddress(); | 770 start_adr = seq_input->GetCharsAddress(); |
| 775 | 771 |
| 776 result = Execute(*code, | 772 result = Execute(*code, |
| 777 *input, | 773 *input, |
| 778 0, | 774 0, |
| 779 start_adr, | 775 start_adr, |
| 780 start_adr + input->length(), | 776 start_adr + input->length(), |
| 781 captures, | 777 captures); |
| 782 true); | |
| 783 | 778 |
| 784 CHECK_EQ(NativeRegExpMacroAssembler::FAILURE, result); | 779 CHECK_EQ(NativeRegExpMacroAssembler::FAILURE, result); |
| 785 } | 780 } |
| 786 | 781 |
| 787 | 782 |
| 788 TEST(MacroAssemblerNativeSimpleUC16) { | 783 TEST(MacroAssemblerNativeSimpleUC16) { |
| 789 v8::V8::Initialize(); | 784 v8::V8::Initialize(); |
| 790 ContextInitializer initializer; | 785 ContextInitializer initializer; |
| 791 | 786 |
| 792 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::UC16, 4); | 787 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::UC16, 4); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 813 Factory::NewStringFromTwoByte(Vector<const uc16>(input_data, 6)); | 808 Factory::NewStringFromTwoByte(Vector<const uc16>(input_data, 6)); |
| 814 Handle<SeqTwoByteString> seq_input = Handle<SeqTwoByteString>::cast(input); | 809 Handle<SeqTwoByteString> seq_input = Handle<SeqTwoByteString>::cast(input); |
| 815 Address start_adr = seq_input->GetCharsAddress(); | 810 Address start_adr = seq_input->GetCharsAddress(); |
| 816 | 811 |
| 817 NativeRegExpMacroAssembler::Result result = | 812 NativeRegExpMacroAssembler::Result result = |
| 818 Execute(*code, | 813 Execute(*code, |
| 819 *input, | 814 *input, |
| 820 0, | 815 0, |
| 821 start_adr, | 816 start_adr, |
| 822 start_adr + input->length(), | 817 start_adr + input->length(), |
| 823 captures, | 818 captures); |
| 824 true); | |
| 825 | 819 |
| 826 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); | 820 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); |
| 827 CHECK_EQ(0, captures[0]); | 821 CHECK_EQ(0, captures[0]); |
| 828 CHECK_EQ(3, captures[1]); | 822 CHECK_EQ(3, captures[1]); |
| 829 CHECK_EQ(-1, captures[2]); | 823 CHECK_EQ(-1, captures[2]); |
| 830 CHECK_EQ(-1, captures[3]); | 824 CHECK_EQ(-1, captures[3]); |
| 831 | 825 |
| 832 const uc16 input_data2[9] = {'b', 'a', 'r', 'b', 'a', 'r', 'b', 'a', '\xa0'}; | 826 const uc16 input_data2[9] = {'b', 'a', 'r', 'b', 'a', 'r', 'b', 'a', '\xa0'}; |
| 833 input = Factory::NewStringFromTwoByte(Vector<const uc16>(input_data2, 9)); | 827 input = Factory::NewStringFromTwoByte(Vector<const uc16>(input_data2, 9)); |
| 834 seq_input = Handle<SeqTwoByteString>::cast(input); | 828 seq_input = Handle<SeqTwoByteString>::cast(input); |
| 835 start_adr = seq_input->GetCharsAddress(); | 829 start_adr = seq_input->GetCharsAddress(); |
| 836 | 830 |
| 837 result = Execute(*code, | 831 result = Execute(*code, |
| 838 *input, | 832 *input, |
| 839 0, | 833 0, |
| 840 start_adr, | 834 start_adr, |
| 841 start_adr + input->length() * 2, | 835 start_adr + input->length() * 2, |
| 842 captures, | 836 captures); |
| 843 true); | |
| 844 | 837 |
| 845 CHECK_EQ(NativeRegExpMacroAssembler::FAILURE, result); | 838 CHECK_EQ(NativeRegExpMacroAssembler::FAILURE, result); |
| 846 } | 839 } |
| 847 | 840 |
| 848 | 841 |
| 849 TEST(MacroAssemblerNativeBacktrack) { | 842 TEST(MacroAssemblerNativeBacktrack) { |
| 850 v8::V8::Initialize(); | 843 v8::V8::Initialize(); |
| 851 ContextInitializer initializer; | 844 ContextInitializer initializer; |
| 852 | 845 |
| 853 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 0); | 846 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 0); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 870 Handle<String> input = Factory::NewStringFromAscii(CStrVector("foofoo")); | 863 Handle<String> input = Factory::NewStringFromAscii(CStrVector("foofoo")); |
| 871 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); | 864 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); |
| 872 Address start_adr = seq_input->GetCharsAddress(); | 865 Address start_adr = seq_input->GetCharsAddress(); |
| 873 | 866 |
| 874 NativeRegExpMacroAssembler::Result result = | 867 NativeRegExpMacroAssembler::Result result = |
| 875 Execute(*code, | 868 Execute(*code, |
| 876 *input, | 869 *input, |
| 877 0, | 870 0, |
| 878 start_adr, | 871 start_adr, |
| 879 start_adr + input->length(), | 872 start_adr + input->length(), |
| 880 NULL, | 873 NULL); |
| 881 true); | |
| 882 | 874 |
| 883 CHECK_EQ(NativeRegExpMacroAssembler::FAILURE, result); | 875 CHECK_EQ(NativeRegExpMacroAssembler::FAILURE, result); |
| 884 } | 876 } |
| 885 | 877 |
| 886 | 878 |
| 887 TEST(MacroAssemblerNativeBackReferenceASCII) { | 879 TEST(MacroAssemblerNativeBackReferenceASCII) { |
| 888 v8::V8::Initialize(); | 880 v8::V8::Initialize(); |
| 889 ContextInitializer initializer; | 881 ContextInitializer initializer; |
| 890 | 882 |
| 891 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4); | 883 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 913 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); | 905 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); |
| 914 Address start_adr = seq_input->GetCharsAddress(); | 906 Address start_adr = seq_input->GetCharsAddress(); |
| 915 | 907 |
| 916 int output[4]; | 908 int output[4]; |
| 917 NativeRegExpMacroAssembler::Result result = | 909 NativeRegExpMacroAssembler::Result result = |
| 918 Execute(*code, | 910 Execute(*code, |
| 919 *input, | 911 *input, |
| 920 0, | 912 0, |
| 921 start_adr, | 913 start_adr, |
| 922 start_adr + input->length(), | 914 start_adr + input->length(), |
| 923 output, | 915 output); |
| 924 true); | |
| 925 | 916 |
| 926 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); | 917 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); |
| 927 CHECK_EQ(0, output[0]); | 918 CHECK_EQ(0, output[0]); |
| 928 CHECK_EQ(2, output[1]); | 919 CHECK_EQ(2, output[1]); |
| 929 CHECK_EQ(6, output[2]); | 920 CHECK_EQ(6, output[2]); |
| 930 CHECK_EQ(-1, output[3]); | 921 CHECK_EQ(-1, output[3]); |
| 931 } | 922 } |
| 932 | 923 |
| 933 | 924 |
| 934 TEST(MacroAssemblerNativeBackReferenceUC16) { | 925 TEST(MacroAssemblerNativeBackReferenceUC16) { |
| (...skipping 27 matching lines...) Expand all Loading... |
| 962 Handle<SeqTwoByteString> seq_input = Handle<SeqTwoByteString>::cast(input); | 953 Handle<SeqTwoByteString> seq_input = Handle<SeqTwoByteString>::cast(input); |
| 963 Address start_adr = seq_input->GetCharsAddress(); | 954 Address start_adr = seq_input->GetCharsAddress(); |
| 964 | 955 |
| 965 int output[4]; | 956 int output[4]; |
| 966 NativeRegExpMacroAssembler::Result result = | 957 NativeRegExpMacroAssembler::Result result = |
| 967 Execute(*code, | 958 Execute(*code, |
| 968 *input, | 959 *input, |
| 969 0, | 960 0, |
| 970 start_adr, | 961 start_adr, |
| 971 start_adr + input->length() * 2, | 962 start_adr + input->length() * 2, |
| 972 output, | 963 output); |
| 973 true); | |
| 974 | 964 |
| 975 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); | 965 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); |
| 976 CHECK_EQ(0, output[0]); | 966 CHECK_EQ(0, output[0]); |
| 977 CHECK_EQ(2, output[1]); | 967 CHECK_EQ(2, output[1]); |
| 978 CHECK_EQ(6, output[2]); | 968 CHECK_EQ(6, output[2]); |
| 979 CHECK_EQ(-1, output[3]); | 969 CHECK_EQ(-1, output[3]); |
| 980 } | 970 } |
| 981 | 971 |
| 982 | 972 |
| 983 | 973 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1015 Handle<String> input = Factory::NewStringFromAscii(CStrVector("foobar")); | 1005 Handle<String> input = Factory::NewStringFromAscii(CStrVector("foobar")); |
| 1016 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); | 1006 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); |
| 1017 Address start_adr = seq_input->GetCharsAddress(); | 1007 Address start_adr = seq_input->GetCharsAddress(); |
| 1018 | 1008 |
| 1019 NativeRegExpMacroAssembler::Result result = | 1009 NativeRegExpMacroAssembler::Result result = |
| 1020 Execute(*code, | 1010 Execute(*code, |
| 1021 *input, | 1011 *input, |
| 1022 0, | 1012 0, |
| 1023 start_adr, | 1013 start_adr, |
| 1024 start_adr + input->length(), | 1014 start_adr + input->length(), |
| 1025 NULL, | 1015 NULL); |
| 1026 true); | |
| 1027 | 1016 |
| 1028 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); | 1017 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); |
| 1029 | 1018 |
| 1030 result = Execute(*code, | 1019 result = Execute(*code, |
| 1031 *input, | 1020 *input, |
| 1032 3, | 1021 3, |
| 1033 start_adr + 3, | 1022 start_adr + 3, |
| 1034 start_adr + input->length(), | 1023 start_adr + input->length(), |
| 1035 NULL, | 1024 NULL); |
| 1036 false); | |
| 1037 | 1025 |
| 1038 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); | 1026 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); |
| 1039 } | 1027 } |
| 1040 | 1028 |
| 1041 | 1029 |
| 1042 TEST(MacroAssemblerNativeBackRefNoCase) { | 1030 TEST(MacroAssemblerNativeBackRefNoCase) { |
| 1043 v8::V8::Initialize(); | 1031 v8::V8::Initialize(); |
| 1044 ContextInitializer initializer; | 1032 ContextInitializer initializer; |
| 1045 | 1033 |
| 1046 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4); | 1034 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1077 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); | 1065 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); |
| 1078 Address start_adr = seq_input->GetCharsAddress(); | 1066 Address start_adr = seq_input->GetCharsAddress(); |
| 1079 | 1067 |
| 1080 int output[4]; | 1068 int output[4]; |
| 1081 NativeRegExpMacroAssembler::Result result = | 1069 NativeRegExpMacroAssembler::Result result = |
| 1082 Execute(*code, | 1070 Execute(*code, |
| 1083 *input, | 1071 *input, |
| 1084 0, | 1072 0, |
| 1085 start_adr, | 1073 start_adr, |
| 1086 start_adr + input->length(), | 1074 start_adr + input->length(), |
| 1087 output, | 1075 output); |
| 1088 true); | |
| 1089 | 1076 |
| 1090 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); | 1077 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); |
| 1091 CHECK_EQ(0, output[0]); | 1078 CHECK_EQ(0, output[0]); |
| 1092 CHECK_EQ(12, output[1]); | 1079 CHECK_EQ(12, output[1]); |
| 1093 CHECK_EQ(0, output[2]); | 1080 CHECK_EQ(0, output[2]); |
| 1094 CHECK_EQ(3, output[3]); | 1081 CHECK_EQ(3, output[3]); |
| 1095 } | 1082 } |
| 1096 | 1083 |
| 1097 | 1084 |
| 1098 | 1085 |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1177 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); | 1164 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); |
| 1178 Address start_adr = seq_input->GetCharsAddress(); | 1165 Address start_adr = seq_input->GetCharsAddress(); |
| 1179 | 1166 |
| 1180 int output[6]; | 1167 int output[6]; |
| 1181 NativeRegExpMacroAssembler::Result result = | 1168 NativeRegExpMacroAssembler::Result result = |
| 1182 Execute(*code, | 1169 Execute(*code, |
| 1183 *input, | 1170 *input, |
| 1184 0, | 1171 0, |
| 1185 start_adr, | 1172 start_adr, |
| 1186 start_adr + input->length(), | 1173 start_adr + input->length(), |
| 1187 output, | 1174 output); |
| 1188 true); | |
| 1189 | 1175 |
| 1190 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); | 1176 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); |
| 1191 CHECK_EQ(0, output[0]); | 1177 CHECK_EQ(0, output[0]); |
| 1192 CHECK_EQ(3, output[1]); | 1178 CHECK_EQ(3, output[1]); |
| 1193 CHECK_EQ(6, output[2]); | 1179 CHECK_EQ(6, output[2]); |
| 1194 CHECK_EQ(9, output[3]); | 1180 CHECK_EQ(9, output[3]); |
| 1195 CHECK_EQ(9, output[4]); | 1181 CHECK_EQ(9, output[4]); |
| 1196 CHECK_EQ(-1, output[5]); | 1182 CHECK_EQ(-1, output[5]); |
| 1197 } | 1183 } |
| 1198 | 1184 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1218 Factory::NewStringFromAscii(CStrVector("dummy")); | 1204 Factory::NewStringFromAscii(CStrVector("dummy")); |
| 1219 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); | 1205 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); |
| 1220 Address start_adr = seq_input->GetCharsAddress(); | 1206 Address start_adr = seq_input->GetCharsAddress(); |
| 1221 | 1207 |
| 1222 NativeRegExpMacroAssembler::Result result = | 1208 NativeRegExpMacroAssembler::Result result = |
| 1223 Execute(*code, | 1209 Execute(*code, |
| 1224 *input, | 1210 *input, |
| 1225 0, | 1211 0, |
| 1226 start_adr, | 1212 start_adr, |
| 1227 start_adr + input->length(), | 1213 start_adr + input->length(), |
| 1228 NULL, | 1214 NULL); |
| 1229 true); | |
| 1230 | 1215 |
| 1231 CHECK_EQ(NativeRegExpMacroAssembler::EXCEPTION, result); | 1216 CHECK_EQ(NativeRegExpMacroAssembler::EXCEPTION, result); |
| 1232 CHECK(Top::has_pending_exception()); | 1217 CHECK(Top::has_pending_exception()); |
| 1233 Top::clear_pending_exception(); | 1218 Top::clear_pending_exception(); |
| 1234 } | 1219 } |
| 1235 | 1220 |
| 1236 | 1221 |
| 1237 TEST(MacroAssemblerNativeLotsOfRegisters) { | 1222 TEST(MacroAssemblerNativeLotsOfRegisters) { |
| 1238 v8::V8::Initialize(); | 1223 v8::V8::Initialize(); |
| 1239 ContextInitializer initializer; | 1224 ContextInitializer initializer; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1264 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); | 1249 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); |
| 1265 Address start_adr = seq_input->GetCharsAddress(); | 1250 Address start_adr = seq_input->GetCharsAddress(); |
| 1266 | 1251 |
| 1267 int captures[2]; | 1252 int captures[2]; |
| 1268 NativeRegExpMacroAssembler::Result result = | 1253 NativeRegExpMacroAssembler::Result result = |
| 1269 Execute(*code, | 1254 Execute(*code, |
| 1270 *input, | 1255 *input, |
| 1271 0, | 1256 0, |
| 1272 start_adr, | 1257 start_adr, |
| 1273 start_adr + input->length(), | 1258 start_adr + input->length(), |
| 1274 captures, | 1259 captures); |
| 1275 true); | |
| 1276 | 1260 |
| 1277 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); | 1261 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); |
| 1278 CHECK_EQ(0, captures[0]); | 1262 CHECK_EQ(0, captures[0]); |
| 1279 CHECK_EQ(42, captures[1]); | 1263 CHECK_EQ(42, captures[1]); |
| 1280 | 1264 |
| 1281 Top::clear_pending_exception(); | 1265 Top::clear_pending_exception(); |
| 1282 } | 1266 } |
| 1283 | 1267 |
| 1284 #else // ! V8_REGEX_NATIVE | 1268 #else // ! V8_REGEX_NATIVE |
| 1285 | 1269 |
| (...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1806 bool in_second = CharacterInSet(&l2, i); | 1790 bool in_second = CharacterInSet(&l2, i); |
| 1807 CHECK((in_first || in_second) == CharacterInSet(&all, i)); | 1791 CHECK((in_first || in_second) == CharacterInSet(&all, i)); |
| 1808 } | 1792 } |
| 1809 } | 1793 } |
| 1810 | 1794 |
| 1811 | 1795 |
| 1812 TEST(Graph) { | 1796 TEST(Graph) { |
| 1813 V8::Initialize(NULL); | 1797 V8::Initialize(NULL); |
| 1814 Execute("\\b\\w+\\b", false, true, true); | 1798 Execute("\\b\\w+\\b", false, true, true); |
| 1815 } | 1799 } |
| OLD | NEW |