OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
499 bool is_ascii, | 499 bool is_ascii, |
500 Zone* zone) { | 500 Zone* zone) { |
501 V8::Initialize(NULL); | 501 V8::Initialize(NULL); |
502 Isolate* isolate = CcTest::i_isolate(); | 502 Isolate* isolate = CcTest::i_isolate(); |
503 FlatStringReader reader(isolate, CStrVector(input)); | 503 FlatStringReader reader(isolate, CStrVector(input)); |
504 RegExpCompileData compile_data; | 504 RegExpCompileData compile_data; |
505 if (!v8::internal::RegExpParser::ParseRegExp(&reader, multiline, | 505 if (!v8::internal::RegExpParser::ParseRegExp(&reader, multiline, |
506 &compile_data, zone)) | 506 &compile_data, zone)) |
507 return NULL; | 507 return NULL; |
508 Handle<String> pattern = isolate->factory()-> | 508 Handle<String> pattern = isolate->factory()-> |
509 NewStringFromUtf8(CStrVector(input)); | 509 NewStringFromUtf8(CStrVector(input)).ToHandleChecked(); |
510 Handle<String> sample_subject = | 510 Handle<String> sample_subject = |
511 isolate->factory()->NewStringFromUtf8(CStrVector("")); | 511 isolate->factory()->NewStringFromUtf8(CStrVector("")).ToHandleChecked(); |
512 RegExpEngine::Compile(&compile_data, | 512 RegExpEngine::Compile(&compile_data, |
513 false, | 513 false, |
514 false, | 514 false, |
515 multiline, | 515 multiline, |
516 pattern, | 516 pattern, |
517 sample_subject, | 517 sample_subject, |
518 is_ascii, | 518 is_ascii, |
519 zone); | 519 zone); |
520 return compile_data.node; | 520 return compile_data.node; |
521 } | 521 } |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
738 v8::V8::Initialize(); | 738 v8::V8::Initialize(); |
739 ContextInitializer initializer; | 739 ContextInitializer initializer; |
740 Isolate* isolate = CcTest::i_isolate(); | 740 Isolate* isolate = CcTest::i_isolate(); |
741 Factory* factory = isolate->factory(); | 741 Factory* factory = isolate->factory(); |
742 Zone zone(isolate); | 742 Zone zone(isolate); |
743 | 743 |
744 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4, &zone); | 744 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4, &zone); |
745 | 745 |
746 m.Succeed(); | 746 m.Succeed(); |
747 | 747 |
748 Handle<String> source = factory->NewStringFromAscii(CStrVector("")); | 748 Handle<String> source = factory->NewStringFromStaticAscii(""); |
749 Handle<Object> code_object = m.GetCode(source); | 749 Handle<Object> code_object = m.GetCode(source); |
750 Handle<Code> code = Handle<Code>::cast(code_object); | 750 Handle<Code> code = Handle<Code>::cast(code_object); |
751 | 751 |
752 int captures[4] = {42, 37, 87, 117}; | 752 int captures[4] = {42, 37, 87, 117}; |
753 Handle<String> input = factory->NewStringFromAscii(CStrVector("foofoo")); | 753 Handle<String> input = factory->NewStringFromStaticAscii("foofoo"); |
754 Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input); | 754 Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input); |
755 const byte* start_adr = | 755 const byte* start_adr = |
756 reinterpret_cast<const byte*>(seq_input->GetCharsAddress()); | 756 reinterpret_cast<const byte*>(seq_input->GetCharsAddress()); |
757 | 757 |
758 NativeRegExpMacroAssembler::Result result = | 758 NativeRegExpMacroAssembler::Result result = |
759 Execute(*code, | 759 Execute(*code, |
760 *input, | 760 *input, |
761 0, | 761 0, |
762 start_adr, | 762 start_adr, |
763 start_adr + seq_input->length(), | 763 start_adr + seq_input->length(), |
(...skipping 28 matching lines...) Expand all Loading... |
792 m.WriteCurrentPositionToRegister(0, 0); | 792 m.WriteCurrentPositionToRegister(0, 0); |
793 m.WriteCurrentPositionToRegister(1, 3); | 793 m.WriteCurrentPositionToRegister(1, 3); |
794 m.AdvanceCurrentPosition(3); | 794 m.AdvanceCurrentPosition(3); |
795 m.PushBacktrack(&backtrack); | 795 m.PushBacktrack(&backtrack); |
796 m.Succeed(); | 796 m.Succeed(); |
797 m.Bind(&backtrack); | 797 m.Bind(&backtrack); |
798 m.Backtrack(); | 798 m.Backtrack(); |
799 m.Bind(&fail); | 799 m.Bind(&fail); |
800 m.Fail(); | 800 m.Fail(); |
801 | 801 |
802 Handle<String> source = factory->NewStringFromAscii(CStrVector("^foo")); | 802 Handle<String> source = factory->NewStringFromStaticAscii("^foo"); |
803 Handle<Object> code_object = m.GetCode(source); | 803 Handle<Object> code_object = m.GetCode(source); |
804 Handle<Code> code = Handle<Code>::cast(code_object); | 804 Handle<Code> code = Handle<Code>::cast(code_object); |
805 | 805 |
806 int captures[4] = {42, 37, 87, 117}; | 806 int captures[4] = {42, 37, 87, 117}; |
807 Handle<String> input = factory->NewStringFromAscii(CStrVector("foofoo")); | 807 Handle<String> input = factory->NewStringFromStaticAscii("foofoo"); |
808 Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input); | 808 Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input); |
809 Address start_adr = seq_input->GetCharsAddress(); | 809 Address start_adr = seq_input->GetCharsAddress(); |
810 | 810 |
811 NativeRegExpMacroAssembler::Result result = | 811 NativeRegExpMacroAssembler::Result result = |
812 Execute(*code, | 812 Execute(*code, |
813 *input, | 813 *input, |
814 0, | 814 0, |
815 start_adr, | 815 start_adr, |
816 start_adr + input->length(), | 816 start_adr + input->length(), |
817 captures); | 817 captures); |
818 | 818 |
819 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); | 819 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); |
820 CHECK_EQ(0, captures[0]); | 820 CHECK_EQ(0, captures[0]); |
821 CHECK_EQ(3, captures[1]); | 821 CHECK_EQ(3, captures[1]); |
822 CHECK_EQ(-1, captures[2]); | 822 CHECK_EQ(-1, captures[2]); |
823 CHECK_EQ(-1, captures[3]); | 823 CHECK_EQ(-1, captures[3]); |
824 | 824 |
825 input = factory->NewStringFromAscii(CStrVector("barbarbar")); | 825 input = factory->NewStringFromStaticAscii("barbarbar"); |
826 seq_input = Handle<SeqOneByteString>::cast(input); | 826 seq_input = Handle<SeqOneByteString>::cast(input); |
827 start_adr = seq_input->GetCharsAddress(); | 827 start_adr = seq_input->GetCharsAddress(); |
828 | 828 |
829 result = Execute(*code, | 829 result = Execute(*code, |
830 *input, | 830 *input, |
831 0, | 831 0, |
832 start_adr, | 832 start_adr, |
833 start_adr + input->length(), | 833 start_adr + input->length(), |
834 captures); | 834 captures); |
835 | 835 |
(...skipping 22 matching lines...) Expand all Loading... |
858 m.WriteCurrentPositionToRegister(0, 0); | 858 m.WriteCurrentPositionToRegister(0, 0); |
859 m.WriteCurrentPositionToRegister(1, 3); | 859 m.WriteCurrentPositionToRegister(1, 3); |
860 m.AdvanceCurrentPosition(3); | 860 m.AdvanceCurrentPosition(3); |
861 m.PushBacktrack(&backtrack); | 861 m.PushBacktrack(&backtrack); |
862 m.Succeed(); | 862 m.Succeed(); |
863 m.Bind(&backtrack); | 863 m.Bind(&backtrack); |
864 m.Backtrack(); | 864 m.Backtrack(); |
865 m.Bind(&fail); | 865 m.Bind(&fail); |
866 m.Fail(); | 866 m.Fail(); |
867 | 867 |
868 Handle<String> source = factory->NewStringFromAscii(CStrVector("^foo")); | 868 Handle<String> source = factory->NewStringFromStaticAscii("^foo"); |
869 Handle<Object> code_object = m.GetCode(source); | 869 Handle<Object> code_object = m.GetCode(source); |
870 Handle<Code> code = Handle<Code>::cast(code_object); | 870 Handle<Code> code = Handle<Code>::cast(code_object); |
871 | 871 |
872 int captures[4] = {42, 37, 87, 117}; | 872 int captures[4] = {42, 37, 87, 117}; |
873 const uc16 input_data[6] = {'f', 'o', 'o', 'f', 'o', | 873 const uc16 input_data[6] = {'f', 'o', 'o', 'f', 'o', |
874 static_cast<uc16>(0x2603)}; | 874 static_cast<uc16>(0x2603)}; |
875 Handle<String> input = | 875 Handle<String> input = factory->NewStringFromTwoByte( |
876 factory->NewStringFromTwoByte(Vector<const uc16>(input_data, 6)); | 876 Vector<const uc16>(input_data, 6)).ToHandleChecked(); |
877 Handle<SeqTwoByteString> seq_input = Handle<SeqTwoByteString>::cast(input); | 877 Handle<SeqTwoByteString> seq_input = Handle<SeqTwoByteString>::cast(input); |
878 Address start_adr = seq_input->GetCharsAddress(); | 878 Address start_adr = seq_input->GetCharsAddress(); |
879 | 879 |
880 NativeRegExpMacroAssembler::Result result = | 880 NativeRegExpMacroAssembler::Result result = |
881 Execute(*code, | 881 Execute(*code, |
882 *input, | 882 *input, |
883 0, | 883 0, |
884 start_adr, | 884 start_adr, |
885 start_adr + input->length(), | 885 start_adr + input->length(), |
886 captures); | 886 captures); |
887 | 887 |
888 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); | 888 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); |
889 CHECK_EQ(0, captures[0]); | 889 CHECK_EQ(0, captures[0]); |
890 CHECK_EQ(3, captures[1]); | 890 CHECK_EQ(3, captures[1]); |
891 CHECK_EQ(-1, captures[2]); | 891 CHECK_EQ(-1, captures[2]); |
892 CHECK_EQ(-1, captures[3]); | 892 CHECK_EQ(-1, captures[3]); |
893 | 893 |
894 const uc16 input_data2[9] = {'b', 'a', 'r', 'b', 'a', 'r', 'b', 'a', | 894 const uc16 input_data2[9] = {'b', 'a', 'r', 'b', 'a', 'r', 'b', 'a', |
895 static_cast<uc16>(0x2603)}; | 895 static_cast<uc16>(0x2603)}; |
896 input = factory->NewStringFromTwoByte(Vector<const uc16>(input_data2, 9)); | 896 input = factory->NewStringFromTwoByte( |
| 897 Vector<const uc16>(input_data2, 9)).ToHandleChecked(); |
897 seq_input = Handle<SeqTwoByteString>::cast(input); | 898 seq_input = Handle<SeqTwoByteString>::cast(input); |
898 start_adr = seq_input->GetCharsAddress(); | 899 start_adr = seq_input->GetCharsAddress(); |
899 | 900 |
900 result = Execute(*code, | 901 result = Execute(*code, |
901 *input, | 902 *input, |
902 0, | 903 0, |
903 start_adr, | 904 start_adr, |
904 start_adr + input->length() * 2, | 905 start_adr + input->length() * 2, |
905 captures); | 906 captures); |
906 | 907 |
(...skipping 14 matching lines...) Expand all Loading... |
921 Label backtrack; | 922 Label backtrack; |
922 m.LoadCurrentCharacter(10, &fail); | 923 m.LoadCurrentCharacter(10, &fail); |
923 m.Succeed(); | 924 m.Succeed(); |
924 m.Bind(&fail); | 925 m.Bind(&fail); |
925 m.PushBacktrack(&backtrack); | 926 m.PushBacktrack(&backtrack); |
926 m.LoadCurrentCharacter(10, NULL); | 927 m.LoadCurrentCharacter(10, NULL); |
927 m.Succeed(); | 928 m.Succeed(); |
928 m.Bind(&backtrack); | 929 m.Bind(&backtrack); |
929 m.Fail(); | 930 m.Fail(); |
930 | 931 |
931 Handle<String> source = factory->NewStringFromAscii(CStrVector("..........")); | 932 Handle<String> source = factory->NewStringFromStaticAscii(".........."); |
932 Handle<Object> code_object = m.GetCode(source); | 933 Handle<Object> code_object = m.GetCode(source); |
933 Handle<Code> code = Handle<Code>::cast(code_object); | 934 Handle<Code> code = Handle<Code>::cast(code_object); |
934 | 935 |
935 Handle<String> input = factory->NewStringFromAscii(CStrVector("foofoo")); | 936 Handle<String> input = factory->NewStringFromStaticAscii("foofoo"); |
936 Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input); | 937 Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input); |
937 Address start_adr = seq_input->GetCharsAddress(); | 938 Address start_adr = seq_input->GetCharsAddress(); |
938 | 939 |
939 NativeRegExpMacroAssembler::Result result = | 940 NativeRegExpMacroAssembler::Result result = |
940 Execute(*code, | 941 Execute(*code, |
941 *input, | 942 *input, |
942 0, | 943 0, |
943 start_adr, | 944 start_adr, |
944 start_adr + input->length(), | 945 start_adr + input->length(), |
945 NULL); | 946 NULL); |
(...skipping 19 matching lines...) Expand all Loading... |
965 m.Fail(); | 966 m.Fail(); |
966 m.Bind(&nomatch); | 967 m.Bind(&nomatch); |
967 m.AdvanceCurrentPosition(2); | 968 m.AdvanceCurrentPosition(2); |
968 Label missing_match; | 969 Label missing_match; |
969 m.CheckNotBackReference(0, &missing_match); | 970 m.CheckNotBackReference(0, &missing_match); |
970 m.WriteCurrentPositionToRegister(2, 0); | 971 m.WriteCurrentPositionToRegister(2, 0); |
971 m.Succeed(); | 972 m.Succeed(); |
972 m.Bind(&missing_match); | 973 m.Bind(&missing_match); |
973 m.Fail(); | 974 m.Fail(); |
974 | 975 |
975 Handle<String> source = factory->NewStringFromAscii(CStrVector("^(..)..\1")); | 976 Handle<String> source = factory->NewStringFromStaticAscii("^(..)..\1"); |
976 Handle<Object> code_object = m.GetCode(source); | 977 Handle<Object> code_object = m.GetCode(source); |
977 Handle<Code> code = Handle<Code>::cast(code_object); | 978 Handle<Code> code = Handle<Code>::cast(code_object); |
978 | 979 |
979 Handle<String> input = factory->NewStringFromAscii(CStrVector("fooofo")); | 980 Handle<String> input = factory->NewStringFromStaticAscii("fooofo"); |
980 Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input); | 981 Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input); |
981 Address start_adr = seq_input->GetCharsAddress(); | 982 Address start_adr = seq_input->GetCharsAddress(); |
982 | 983 |
983 int output[4]; | 984 int output[4]; |
984 NativeRegExpMacroAssembler::Result result = | 985 NativeRegExpMacroAssembler::Result result = |
985 Execute(*code, | 986 Execute(*code, |
986 *input, | 987 *input, |
987 0, | 988 0, |
988 start_adr, | 989 start_adr, |
989 start_adr + input->length(), | 990 start_adr + input->length(), |
(...skipping 24 matching lines...) Expand all Loading... |
1014 m.Fail(); | 1015 m.Fail(); |
1015 m.Bind(&nomatch); | 1016 m.Bind(&nomatch); |
1016 m.AdvanceCurrentPosition(2); | 1017 m.AdvanceCurrentPosition(2); |
1017 Label missing_match; | 1018 Label missing_match; |
1018 m.CheckNotBackReference(0, &missing_match); | 1019 m.CheckNotBackReference(0, &missing_match); |
1019 m.WriteCurrentPositionToRegister(2, 0); | 1020 m.WriteCurrentPositionToRegister(2, 0); |
1020 m.Succeed(); | 1021 m.Succeed(); |
1021 m.Bind(&missing_match); | 1022 m.Bind(&missing_match); |
1022 m.Fail(); | 1023 m.Fail(); |
1023 | 1024 |
1024 Handle<String> source = factory->NewStringFromAscii(CStrVector("^(..)..\1")); | 1025 Handle<String> source = factory->NewStringFromStaticAscii("^(..)..\1"); |
1025 Handle<Object> code_object = m.GetCode(source); | 1026 Handle<Object> code_object = m.GetCode(source); |
1026 Handle<Code> code = Handle<Code>::cast(code_object); | 1027 Handle<Code> code = Handle<Code>::cast(code_object); |
1027 | 1028 |
1028 const uc16 input_data[6] = {'f', 0x2028, 'o', 'o', 'f', 0x2028}; | 1029 const uc16 input_data[6] = {'f', 0x2028, 'o', 'o', 'f', 0x2028}; |
1029 Handle<String> input = | 1030 Handle<String> input = factory->NewStringFromTwoByte( |
1030 factory->NewStringFromTwoByte(Vector<const uc16>(input_data, 6)); | 1031 Vector<const uc16>(input_data, 6)).ToHandleChecked(); |
1031 Handle<SeqTwoByteString> seq_input = Handle<SeqTwoByteString>::cast(input); | 1032 Handle<SeqTwoByteString> seq_input = Handle<SeqTwoByteString>::cast(input); |
1032 Address start_adr = seq_input->GetCharsAddress(); | 1033 Address start_adr = seq_input->GetCharsAddress(); |
1033 | 1034 |
1034 int output[4]; | 1035 int output[4]; |
1035 NativeRegExpMacroAssembler::Result result = | 1036 NativeRegExpMacroAssembler::Result result = |
1036 Execute(*code, | 1037 Execute(*code, |
1037 *input, | 1038 *input, |
1038 0, | 1039 0, |
1039 start_adr, | 1040 start_adr, |
1040 start_adr + input->length() * 2, | 1041 start_adr + input->length() * 2, |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1072 m.Bind(¬_at_start); | 1073 m.Bind(¬_at_start); |
1073 // Check that prevchar = 'o' and current = 'b'. | 1074 // Check that prevchar = 'o' and current = 'b'. |
1074 Label prevo; | 1075 Label prevo; |
1075 m.CheckCharacter('o', &prevo); | 1076 m.CheckCharacter('o', &prevo); |
1076 m.Fail(); | 1077 m.Fail(); |
1077 m.Bind(&prevo); | 1078 m.Bind(&prevo); |
1078 m.LoadCurrentCharacter(0, &fail); | 1079 m.LoadCurrentCharacter(0, &fail); |
1079 m.CheckNotCharacter('b', &fail); | 1080 m.CheckNotCharacter('b', &fail); |
1080 m.Succeed(); | 1081 m.Succeed(); |
1081 | 1082 |
1082 Handle<String> source = factory->NewStringFromAscii(CStrVector("(^f|ob)")); | 1083 Handle<String> source = factory->NewStringFromStaticAscii("(^f|ob)"); |
1083 Handle<Object> code_object = m.GetCode(source); | 1084 Handle<Object> code_object = m.GetCode(source); |
1084 Handle<Code> code = Handle<Code>::cast(code_object); | 1085 Handle<Code> code = Handle<Code>::cast(code_object); |
1085 | 1086 |
1086 Handle<String> input = factory->NewStringFromAscii(CStrVector("foobar")); | 1087 Handle<String> input = factory->NewStringFromStaticAscii("foobar"); |
1087 Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input); | 1088 Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input); |
1088 Address start_adr = seq_input->GetCharsAddress(); | 1089 Address start_adr = seq_input->GetCharsAddress(); |
1089 | 1090 |
1090 NativeRegExpMacroAssembler::Result result = | 1091 NativeRegExpMacroAssembler::Result result = |
1091 Execute(*code, | 1092 Execute(*code, |
1092 *input, | 1093 *input, |
1093 0, | 1094 0, |
1094 start_adr, | 1095 start_adr, |
1095 start_adr + input->length(), | 1096 start_adr + input->length(), |
1096 NULL); | 1097 NULL); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1133 m.Bind(&expected_fail); | 1134 m.Bind(&expected_fail); |
1134 m.AdvanceCurrentPosition(3); // Skip "xYz" | 1135 m.AdvanceCurrentPosition(3); // Skip "xYz" |
1135 m.CheckNotBackReferenceIgnoreCase(2, &succ); | 1136 m.CheckNotBackReferenceIgnoreCase(2, &succ); |
1136 m.Fail(); | 1137 m.Fail(); |
1137 | 1138 |
1138 m.Bind(&succ); | 1139 m.Bind(&succ); |
1139 m.WriteCurrentPositionToRegister(1, 0); | 1140 m.WriteCurrentPositionToRegister(1, 0); |
1140 m.Succeed(); | 1141 m.Succeed(); |
1141 | 1142 |
1142 Handle<String> source = | 1143 Handle<String> source = |
1143 factory->NewStringFromAscii(CStrVector("^(abc)\1\1(?!\1)...(?!\1)")); | 1144 factory->NewStringFromStaticAscii("^(abc)\1\1(?!\1)...(?!\1)"); |
1144 Handle<Object> code_object = m.GetCode(source); | 1145 Handle<Object> code_object = m.GetCode(source); |
1145 Handle<Code> code = Handle<Code>::cast(code_object); | 1146 Handle<Code> code = Handle<Code>::cast(code_object); |
1146 | 1147 |
1147 Handle<String> input = | 1148 Handle<String> input = |
1148 factory->NewStringFromAscii(CStrVector("aBcAbCABCxYzab")); | 1149 factory->NewStringFromStaticAscii("aBcAbCABCxYzab"); |
1149 Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input); | 1150 Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input); |
1150 Address start_adr = seq_input->GetCharsAddress(); | 1151 Address start_adr = seq_input->GetCharsAddress(); |
1151 | 1152 |
1152 int output[4]; | 1153 int output[4]; |
1153 NativeRegExpMacroAssembler::Result result = | 1154 NativeRegExpMacroAssembler::Result result = |
1154 Execute(*code, | 1155 Execute(*code, |
1155 *input, | 1156 *input, |
1156 0, | 1157 0, |
1157 start_adr, | 1158 start_adr, |
1158 start_adr + input->length(), | 1159 start_adr + input->length(), |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1234 m.Bind(&exit_loop3); | 1235 m.Bind(&exit_loop3); |
1235 m.PopCurrentPosition(); | 1236 m.PopCurrentPosition(); |
1236 m.WriteCurrentPositionToRegister(out5, 0); // [0,3,6,9,9,-1] | 1237 m.WriteCurrentPositionToRegister(out5, 0); // [0,3,6,9,9,-1] |
1237 | 1238 |
1238 m.Succeed(); | 1239 m.Succeed(); |
1239 | 1240 |
1240 m.Bind(&fail); | 1241 m.Bind(&fail); |
1241 m.Fail(); | 1242 m.Fail(); |
1242 | 1243 |
1243 Handle<String> source = | 1244 Handle<String> source = |
1244 factory->NewStringFromAscii(CStrVector("<loop test>")); | 1245 factory->NewStringFromStaticAscii("<loop test>"); |
1245 Handle<Object> code_object = m.GetCode(source); | 1246 Handle<Object> code_object = m.GetCode(source); |
1246 Handle<Code> code = Handle<Code>::cast(code_object); | 1247 Handle<Code> code = Handle<Code>::cast(code_object); |
1247 | 1248 |
1248 // String long enough for test (content doesn't matter). | 1249 // String long enough for test (content doesn't matter). |
1249 Handle<String> input = | 1250 Handle<String> input = |
1250 factory->NewStringFromAscii(CStrVector("foofoofoofoofoo")); | 1251 factory->NewStringFromStaticAscii("foofoofoofoofoo"); |
1251 Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input); | 1252 Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input); |
1252 Address start_adr = seq_input->GetCharsAddress(); | 1253 Address start_adr = seq_input->GetCharsAddress(); |
1253 | 1254 |
1254 int output[6]; | 1255 int output[6]; |
1255 NativeRegExpMacroAssembler::Result result = | 1256 NativeRegExpMacroAssembler::Result result = |
1256 Execute(*code, | 1257 Execute(*code, |
1257 *input, | 1258 *input, |
1258 0, | 1259 0, |
1259 start_adr, | 1260 start_adr, |
1260 start_adr + input->length(), | 1261 start_adr + input->length(), |
(...skipping 17 matching lines...) Expand all Loading... |
1278 Zone zone(isolate); | 1279 Zone zone(isolate); |
1279 | 1280 |
1280 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 0, &zone); | 1281 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 0, &zone); |
1281 | 1282 |
1282 Label loop; | 1283 Label loop; |
1283 m.Bind(&loop); | 1284 m.Bind(&loop); |
1284 m.PushBacktrack(&loop); | 1285 m.PushBacktrack(&loop); |
1285 m.GoTo(&loop); | 1286 m.GoTo(&loop); |
1286 | 1287 |
1287 Handle<String> source = | 1288 Handle<String> source = |
1288 factory->NewStringFromAscii(CStrVector("<stack overflow test>")); | 1289 factory->NewStringFromStaticAscii("<stack overflow test>"); |
1289 Handle<Object> code_object = m.GetCode(source); | 1290 Handle<Object> code_object = m.GetCode(source); |
1290 Handle<Code> code = Handle<Code>::cast(code_object); | 1291 Handle<Code> code = Handle<Code>::cast(code_object); |
1291 | 1292 |
1292 // String long enough for test (content doesn't matter). | 1293 // String long enough for test (content doesn't matter). |
1293 Handle<String> input = | 1294 Handle<String> input = |
1294 factory->NewStringFromAscii(CStrVector("dummy")); | 1295 factory->NewStringFromStaticAscii("dummy"); |
1295 Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input); | 1296 Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input); |
1296 Address start_adr = seq_input->GetCharsAddress(); | 1297 Address start_adr = seq_input->GetCharsAddress(); |
1297 | 1298 |
1298 NativeRegExpMacroAssembler::Result result = | 1299 NativeRegExpMacroAssembler::Result result = |
1299 Execute(*code, | 1300 Execute(*code, |
1300 *input, | 1301 *input, |
1301 0, | 1302 0, |
1302 start_adr, | 1303 start_adr, |
1303 start_adr + input->length(), | 1304 start_adr + input->length(), |
1304 NULL); | 1305 NULL); |
(...skipping 20 matching lines...) Expand all Loading... |
1325 m.WriteCurrentPositionToRegister(0, 0); | 1326 m.WriteCurrentPositionToRegister(0, 0); |
1326 m.WriteCurrentPositionToRegister(1, 1); | 1327 m.WriteCurrentPositionToRegister(1, 1); |
1327 Label done; | 1328 Label done; |
1328 m.CheckNotBackReference(0, &done); // Performs a system-stack push. | 1329 m.CheckNotBackReference(0, &done); // Performs a system-stack push. |
1329 m.Bind(&done); | 1330 m.Bind(&done); |
1330 m.PushRegister(large_number, RegExpMacroAssembler::kNoStackLimitCheck); | 1331 m.PushRegister(large_number, RegExpMacroAssembler::kNoStackLimitCheck); |
1331 m.PopRegister(1); | 1332 m.PopRegister(1); |
1332 m.Succeed(); | 1333 m.Succeed(); |
1333 | 1334 |
1334 Handle<String> source = | 1335 Handle<String> source = |
1335 factory->NewStringFromAscii(CStrVector("<huge register space test>")); | 1336 factory->NewStringFromStaticAscii("<huge register space test>"); |
1336 Handle<Object> code_object = m.GetCode(source); | 1337 Handle<Object> code_object = m.GetCode(source); |
1337 Handle<Code> code = Handle<Code>::cast(code_object); | 1338 Handle<Code> code = Handle<Code>::cast(code_object); |
1338 | 1339 |
1339 // String long enough for test (content doesn't matter). | 1340 // String long enough for test (content doesn't matter). |
1340 Handle<String> input = | 1341 Handle<String> input = |
1341 factory->NewStringFromAscii(CStrVector("sample text")); | 1342 factory->NewStringFromStaticAscii("sample text"); |
1342 Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input); | 1343 Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input); |
1343 Address start_adr = seq_input->GetCharsAddress(); | 1344 Address start_adr = seq_input->GetCharsAddress(); |
1344 | 1345 |
1345 int captures[2]; | 1346 int captures[2]; |
1346 NativeRegExpMacroAssembler::Result result = | 1347 NativeRegExpMacroAssembler::Result result = |
1347 Execute(*code, | 1348 Execute(*code, |
1348 *input, | 1349 *input, |
1349 0, | 1350 0, |
1350 start_adr, | 1351 start_adr, |
1351 start_adr + input->length(), | 1352 start_adr + input->length(), |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1393 m.ClearRegisters(2, 3); | 1394 m.ClearRegisters(2, 3); |
1394 m.Backtrack(); | 1395 m.Backtrack(); |
1395 m.Bind(&fail); | 1396 m.Bind(&fail); |
1396 m.PopRegister(0); | 1397 m.PopRegister(0); |
1397 m.Fail(); | 1398 m.Fail(); |
1398 | 1399 |
1399 Isolate* isolate = CcTest::i_isolate(); | 1400 Isolate* isolate = CcTest::i_isolate(); |
1400 Factory* factory = isolate->factory(); | 1401 Factory* factory = isolate->factory(); |
1401 HandleScope scope(isolate); | 1402 HandleScope scope(isolate); |
1402 | 1403 |
1403 Handle<String> source = factory->NewStringFromAscii(CStrVector("^f(o)o")); | 1404 Handle<String> source = factory->NewStringFromStaticAscii("^f(o)o"); |
1404 Handle<ByteArray> array = Handle<ByteArray>::cast(m.GetCode(source)); | 1405 Handle<ByteArray> array = Handle<ByteArray>::cast(m.GetCode(source)); |
1405 int captures[5]; | 1406 int captures[5]; |
1406 | 1407 |
1407 const uc16 str1[] = {'f', 'o', 'o', 'b', 'a', 'r'}; | 1408 const uc16 str1[] = {'f', 'o', 'o', 'b', 'a', 'r'}; |
1408 Handle<String> f1_16 = | 1409 Handle<String> f1_16 = |
1409 factory->NewStringFromTwoByte(Vector<const uc16>(str1, 6)); | 1410 factory->NewStringFromTwoByte(Vector<const uc16>(str1, 6)); |
1410 | 1411 |
1411 CHECK(IrregexpInterpreter::Match(isolate, array, f1_16, captures, 0)); | 1412 CHECK(IrregexpInterpreter::Match(isolate, array, f1_16, captures, 0)); |
1412 CHECK_EQ(0, captures[0]); | 1413 CHECK_EQ(0, captures[0]); |
1413 CHECK_EQ(3, captures[1]); | 1414 CHECK_EQ(3, captures[1]); |
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1803 ZoneList<CharacterRange> first_only(4, &zone); | 1804 ZoneList<CharacterRange> first_only(4, &zone); |
1804 ZoneList<CharacterRange> second_only(4, &zone); | 1805 ZoneList<CharacterRange> second_only(4, &zone); |
1805 ZoneList<CharacterRange> both(4, &zone); | 1806 ZoneList<CharacterRange> both(4, &zone); |
1806 } | 1807 } |
1807 | 1808 |
1808 | 1809 |
1809 TEST(Graph) { | 1810 TEST(Graph) { |
1810 V8::Initialize(NULL); | 1811 V8::Initialize(NULL); |
1811 Execute("\\b\\w+\\b", false, true, true); | 1812 Execute("\\b\\w+\\b", false, true, true); |
1812 } | 1813 } |
OLD | NEW |