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

Side by Side Diff: test/cctest/test-regexp.cc

Issue 6793019: Cleanup of FACTORY macro and fix Irregexp Interpreter build in test-regexp.cc (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fix factory variables Created 9 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 470 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 TestCharacterClassEscapes('D', NotDigit); 481 TestCharacterClassEscapes('D', NotDigit);
482 TestCharacterClassEscapes('s', IsWhiteSpace); 482 TestCharacterClassEscapes('s', IsWhiteSpace);
483 TestCharacterClassEscapes('S', NotWhiteSpace); 483 TestCharacterClassEscapes('S', NotWhiteSpace);
484 TestCharacterClassEscapes('w', IsRegExpWord); 484 TestCharacterClassEscapes('w', IsRegExpWord);
485 TestCharacterClassEscapes('W', NotWord); 485 TestCharacterClassEscapes('W', NotWord);
486 } 486 }
487 487
488 488
489 static RegExpNode* Compile(const char* input, bool multiline, bool is_ascii) { 489 static RegExpNode* Compile(const char* input, bool multiline, bool is_ascii) {
490 V8::Initialize(NULL); 490 V8::Initialize(NULL);
491 FlatStringReader reader(Isolate::Current(), CStrVector(input)); 491 Isolate* isolate = Isolate::Current();
492 FlatStringReader reader(isolate, CStrVector(input));
492 RegExpCompileData compile_data; 493 RegExpCompileData compile_data;
493 if (!v8::internal::RegExpParser::ParseRegExp(&reader, multiline, 494 if (!v8::internal::RegExpParser::ParseRegExp(&reader, multiline,
494 &compile_data)) 495 &compile_data))
495 return NULL; 496 return NULL;
496 Handle<String> pattern = FACTORY->NewStringFromUtf8(CStrVector(input)); 497 Handle<String> pattern = isolate->factory()->
498 NewStringFromUtf8(CStrVector(input));
497 RegExpEngine::Compile(&compile_data, false, multiline, pattern, is_ascii); 499 RegExpEngine::Compile(&compile_data, false, multiline, pattern, is_ascii);
498 return compile_data.node; 500 return compile_data.node;
499 } 501 }
500 502
501 503
502 static void Execute(const char* input, 504 static void Execute(const char* input,
503 bool multiline, 505 bool multiline,
504 bool is_ascii, 506 bool is_ascii,
505 bool dot_output = false) { 507 bool dot_output = false) {
506 v8::HandleScope scope; 508 v8::HandleScope scope;
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
708 input_start, 710 input_start,
709 input_end, 711 input_end,
710 captures, 712 captures,
711 Isolate::Current()); 713 Isolate::Current());
712 } 714 }
713 715
714 716
715 TEST(MacroAssemblerNativeSuccess) { 717 TEST(MacroAssemblerNativeSuccess) {
716 v8::V8::Initialize(); 718 v8::V8::Initialize();
717 ContextInitializer initializer; 719 ContextInitializer initializer;
720 Factory* factory = Isolate::Current()->factory();
718 721
719 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4); 722 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4);
720 723
721 m.Succeed(); 724 m.Succeed();
722 725
723 Handle<String> source = FACTORY->NewStringFromAscii(CStrVector("")); 726 Handle<String> source = factory->NewStringFromAscii(CStrVector(""));
724 Handle<Object> code_object = m.GetCode(source); 727 Handle<Object> code_object = m.GetCode(source);
725 Handle<Code> code = Handle<Code>::cast(code_object); 728 Handle<Code> code = Handle<Code>::cast(code_object);
726 729
727 int captures[4] = {42, 37, 87, 117}; 730 int captures[4] = {42, 37, 87, 117};
728 Handle<String> input = FACTORY->NewStringFromAscii(CStrVector("foofoo")); 731 Handle<String> input = factory->NewStringFromAscii(CStrVector("foofoo"));
729 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); 732 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
730 const byte* start_adr = 733 const byte* start_adr =
731 reinterpret_cast<const byte*>(seq_input->GetCharsAddress()); 734 reinterpret_cast<const byte*>(seq_input->GetCharsAddress());
732 735
733 NativeRegExpMacroAssembler::Result result = 736 NativeRegExpMacroAssembler::Result result =
734 Execute(*code, 737 Execute(*code,
735 *input, 738 *input,
736 0, 739 0,
737 start_adr, 740 start_adr,
738 start_adr + seq_input->length(), 741 start_adr + seq_input->length(),
739 captures); 742 captures);
740 743
741 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); 744 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result);
742 CHECK_EQ(-1, captures[0]); 745 CHECK_EQ(-1, captures[0]);
743 CHECK_EQ(-1, captures[1]); 746 CHECK_EQ(-1, captures[1]);
744 CHECK_EQ(-1, captures[2]); 747 CHECK_EQ(-1, captures[2]);
745 CHECK_EQ(-1, captures[3]); 748 CHECK_EQ(-1, captures[3]);
746 } 749 }
747 750
748 751
749 TEST(MacroAssemblerNativeSimple) { 752 TEST(MacroAssemblerNativeSimple) {
750 v8::V8::Initialize(); 753 v8::V8::Initialize();
751 ContextInitializer initializer; 754 ContextInitializer initializer;
755 Factory* factory = Isolate::Current()->factory();
752 756
753 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4); 757 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4);
754 758
755 uc16 foo_chars[3] = {'f', 'o', 'o'}; 759 uc16 foo_chars[3] = {'f', 'o', 'o'};
756 Vector<const uc16> foo(foo_chars, 3); 760 Vector<const uc16> foo(foo_chars, 3);
757 761
758 Label fail; 762 Label fail;
759 m.CheckCharacters(foo, 0, &fail, true); 763 m.CheckCharacters(foo, 0, &fail, true);
760 m.WriteCurrentPositionToRegister(0, 0); 764 m.WriteCurrentPositionToRegister(0, 0);
761 m.AdvanceCurrentPosition(3); 765 m.AdvanceCurrentPosition(3);
762 m.WriteCurrentPositionToRegister(1, 0); 766 m.WriteCurrentPositionToRegister(1, 0);
763 m.Succeed(); 767 m.Succeed();
764 m.Bind(&fail); 768 m.Bind(&fail);
765 m.Fail(); 769 m.Fail();
766 770
767 Handle<String> source = FACTORY->NewStringFromAscii(CStrVector("^foo")); 771 Handle<String> source = factory->NewStringFromAscii(CStrVector("^foo"));
768 Handle<Object> code_object = m.GetCode(source); 772 Handle<Object> code_object = m.GetCode(source);
769 Handle<Code> code = Handle<Code>::cast(code_object); 773 Handle<Code> code = Handle<Code>::cast(code_object);
770 774
771 int captures[4] = {42, 37, 87, 117}; 775 int captures[4] = {42, 37, 87, 117};
772 Handle<String> input = FACTORY->NewStringFromAscii(CStrVector("foofoo")); 776 Handle<String> input = factory->NewStringFromAscii(CStrVector("foofoo"));
773 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); 777 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
774 Address start_adr = seq_input->GetCharsAddress(); 778 Address start_adr = seq_input->GetCharsAddress();
775 779
776 NativeRegExpMacroAssembler::Result result = 780 NativeRegExpMacroAssembler::Result result =
777 Execute(*code, 781 Execute(*code,
778 *input, 782 *input,
779 0, 783 0,
780 start_adr, 784 start_adr,
781 start_adr + input->length(), 785 start_adr + input->length(),
782 captures); 786 captures);
783 787
784 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); 788 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result);
785 CHECK_EQ(0, captures[0]); 789 CHECK_EQ(0, captures[0]);
786 CHECK_EQ(3, captures[1]); 790 CHECK_EQ(3, captures[1]);
787 CHECK_EQ(-1, captures[2]); 791 CHECK_EQ(-1, captures[2]);
788 CHECK_EQ(-1, captures[3]); 792 CHECK_EQ(-1, captures[3]);
789 793
790 input = FACTORY->NewStringFromAscii(CStrVector("barbarbar")); 794 input = factory->NewStringFromAscii(CStrVector("barbarbar"));
791 seq_input = Handle<SeqAsciiString>::cast(input); 795 seq_input = Handle<SeqAsciiString>::cast(input);
792 start_adr = seq_input->GetCharsAddress(); 796 start_adr = seq_input->GetCharsAddress();
793 797
794 result = Execute(*code, 798 result = Execute(*code,
795 *input, 799 *input,
796 0, 800 0,
797 start_adr, 801 start_adr,
798 start_adr + input->length(), 802 start_adr + input->length(),
799 captures); 803 captures);
800 804
801 CHECK_EQ(NativeRegExpMacroAssembler::FAILURE, result); 805 CHECK_EQ(NativeRegExpMacroAssembler::FAILURE, result);
802 } 806 }
803 807
804 808
805 TEST(MacroAssemblerNativeSimpleUC16) { 809 TEST(MacroAssemblerNativeSimpleUC16) {
806 v8::V8::Initialize(); 810 v8::V8::Initialize();
807 ContextInitializer initializer; 811 ContextInitializer initializer;
812 Factory* factory = Isolate::Current()->factory();
808 813
809 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::UC16, 4); 814 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::UC16, 4);
810 815
811 uc16 foo_chars[3] = {'f', 'o', 'o'}; 816 uc16 foo_chars[3] = {'f', 'o', 'o'};
812 Vector<const uc16> foo(foo_chars, 3); 817 Vector<const uc16> foo(foo_chars, 3);
813 818
814 Label fail; 819 Label fail;
815 m.CheckCharacters(foo, 0, &fail, true); 820 m.CheckCharacters(foo, 0, &fail, true);
816 m.WriteCurrentPositionToRegister(0, 0); 821 m.WriteCurrentPositionToRegister(0, 0);
817 m.AdvanceCurrentPosition(3); 822 m.AdvanceCurrentPosition(3);
818 m.WriteCurrentPositionToRegister(1, 0); 823 m.WriteCurrentPositionToRegister(1, 0);
819 m.Succeed(); 824 m.Succeed();
820 m.Bind(&fail); 825 m.Bind(&fail);
821 m.Fail(); 826 m.Fail();
822 827
823 Handle<String> source = FACTORY->NewStringFromAscii(CStrVector("^foo")); 828 Handle<String> source = factory->NewStringFromAscii(CStrVector("^foo"));
824 Handle<Object> code_object = m.GetCode(source); 829 Handle<Object> code_object = m.GetCode(source);
825 Handle<Code> code = Handle<Code>::cast(code_object); 830 Handle<Code> code = Handle<Code>::cast(code_object);
826 831
827 int captures[4] = {42, 37, 87, 117}; 832 int captures[4] = {42, 37, 87, 117};
828 const uc16 input_data[6] = {'f', 'o', 'o', 'f', 'o', '\xa0'}; 833 const uc16 input_data[6] = {'f', 'o', 'o', 'f', 'o', '\xa0'};
829 Handle<String> input = 834 Handle<String> input =
830 FACTORY->NewStringFromTwoByte(Vector<const uc16>(input_data, 6)); 835 factory->NewStringFromTwoByte(Vector<const uc16>(input_data, 6));
831 Handle<SeqTwoByteString> seq_input = Handle<SeqTwoByteString>::cast(input); 836 Handle<SeqTwoByteString> seq_input = Handle<SeqTwoByteString>::cast(input);
832 Address start_adr = seq_input->GetCharsAddress(); 837 Address start_adr = seq_input->GetCharsAddress();
833 838
834 NativeRegExpMacroAssembler::Result result = 839 NativeRegExpMacroAssembler::Result result =
835 Execute(*code, 840 Execute(*code,
836 *input, 841 *input,
837 0, 842 0,
838 start_adr, 843 start_adr,
839 start_adr + input->length(), 844 start_adr + input->length(),
840 captures); 845 captures);
841 846
842 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); 847 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result);
843 CHECK_EQ(0, captures[0]); 848 CHECK_EQ(0, captures[0]);
844 CHECK_EQ(3, captures[1]); 849 CHECK_EQ(3, captures[1]);
845 CHECK_EQ(-1, captures[2]); 850 CHECK_EQ(-1, captures[2]);
846 CHECK_EQ(-1, captures[3]); 851 CHECK_EQ(-1, captures[3]);
847 852
848 const uc16 input_data2[9] = {'b', 'a', 'r', 'b', 'a', 'r', 'b', 'a', '\xa0'}; 853 const uc16 input_data2[9] = {'b', 'a', 'r', 'b', 'a', 'r', 'b', 'a', '\xa0'};
849 input = FACTORY->NewStringFromTwoByte(Vector<const uc16>(input_data2, 9)); 854 input = factory->NewStringFromTwoByte(Vector<const uc16>(input_data2, 9));
850 seq_input = Handle<SeqTwoByteString>::cast(input); 855 seq_input = Handle<SeqTwoByteString>::cast(input);
851 start_adr = seq_input->GetCharsAddress(); 856 start_adr = seq_input->GetCharsAddress();
852 857
853 result = Execute(*code, 858 result = Execute(*code,
854 *input, 859 *input,
855 0, 860 0,
856 start_adr, 861 start_adr,
857 start_adr + input->length() * 2, 862 start_adr + input->length() * 2,
858 captures); 863 captures);
859 864
860 CHECK_EQ(NativeRegExpMacroAssembler::FAILURE, result); 865 CHECK_EQ(NativeRegExpMacroAssembler::FAILURE, result);
861 } 866 }
862 867
863 868
864 TEST(MacroAssemblerNativeBacktrack) { 869 TEST(MacroAssemblerNativeBacktrack) {
865 v8::V8::Initialize(); 870 v8::V8::Initialize();
866 ContextInitializer initializer; 871 ContextInitializer initializer;
872 Factory* factory = Isolate::Current()->factory();
867 873
868 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 0); 874 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 0);
869 875
870 Label fail; 876 Label fail;
871 Label backtrack; 877 Label backtrack;
872 m.LoadCurrentCharacter(10, &fail); 878 m.LoadCurrentCharacter(10, &fail);
873 m.Succeed(); 879 m.Succeed();
874 m.Bind(&fail); 880 m.Bind(&fail);
875 m.PushBacktrack(&backtrack); 881 m.PushBacktrack(&backtrack);
876 m.LoadCurrentCharacter(10, NULL); 882 m.LoadCurrentCharacter(10, NULL);
877 m.Succeed(); 883 m.Succeed();
878 m.Bind(&backtrack); 884 m.Bind(&backtrack);
879 m.Fail(); 885 m.Fail();
880 886
881 Handle<String> source = FACTORY->NewStringFromAscii(CStrVector("..........")); 887 Handle<String> source = factory->NewStringFromAscii(CStrVector(".........."));
882 Handle<Object> code_object = m.GetCode(source); 888 Handle<Object> code_object = m.GetCode(source);
883 Handle<Code> code = Handle<Code>::cast(code_object); 889 Handle<Code> code = Handle<Code>::cast(code_object);
884 890
885 Handle<String> input = FACTORY->NewStringFromAscii(CStrVector("foofoo")); 891 Handle<String> input = factory->NewStringFromAscii(CStrVector("foofoo"));
886 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); 892 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
887 Address start_adr = seq_input->GetCharsAddress(); 893 Address start_adr = seq_input->GetCharsAddress();
888 894
889 NativeRegExpMacroAssembler::Result result = 895 NativeRegExpMacroAssembler::Result result =
890 Execute(*code, 896 Execute(*code,
891 *input, 897 *input,
892 0, 898 0,
893 start_adr, 899 start_adr,
894 start_adr + input->length(), 900 start_adr + input->length(),
895 NULL); 901 NULL);
896 902
897 CHECK_EQ(NativeRegExpMacroAssembler::FAILURE, result); 903 CHECK_EQ(NativeRegExpMacroAssembler::FAILURE, result);
898 } 904 }
899 905
900 906
901 TEST(MacroAssemblerNativeBackReferenceASCII) { 907 TEST(MacroAssemblerNativeBackReferenceASCII) {
902 v8::V8::Initialize(); 908 v8::V8::Initialize();
903 ContextInitializer initializer; 909 ContextInitializer initializer;
910 Factory* factory = Isolate::Current()->factory();
904 911
905 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4); 912 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4);
906 913
907 m.WriteCurrentPositionToRegister(0, 0); 914 m.WriteCurrentPositionToRegister(0, 0);
908 m.AdvanceCurrentPosition(2); 915 m.AdvanceCurrentPosition(2);
909 m.WriteCurrentPositionToRegister(1, 0); 916 m.WriteCurrentPositionToRegister(1, 0);
910 Label nomatch; 917 Label nomatch;
911 m.CheckNotBackReference(0, &nomatch); 918 m.CheckNotBackReference(0, &nomatch);
912 m.Fail(); 919 m.Fail();
913 m.Bind(&nomatch); 920 m.Bind(&nomatch);
914 m.AdvanceCurrentPosition(2); 921 m.AdvanceCurrentPosition(2);
915 Label missing_match; 922 Label missing_match;
916 m.CheckNotBackReference(0, &missing_match); 923 m.CheckNotBackReference(0, &missing_match);
917 m.WriteCurrentPositionToRegister(2, 0); 924 m.WriteCurrentPositionToRegister(2, 0);
918 m.Succeed(); 925 m.Succeed();
919 m.Bind(&missing_match); 926 m.Bind(&missing_match);
920 m.Fail(); 927 m.Fail();
921 928
922 Handle<String> source = FACTORY->NewStringFromAscii(CStrVector("^(..)..\1")); 929 Handle<String> source = factory->NewStringFromAscii(CStrVector("^(..)..\1"));
923 Handle<Object> code_object = m.GetCode(source); 930 Handle<Object> code_object = m.GetCode(source);
924 Handle<Code> code = Handle<Code>::cast(code_object); 931 Handle<Code> code = Handle<Code>::cast(code_object);
925 932
926 Handle<String> input = FACTORY->NewStringFromAscii(CStrVector("fooofo")); 933 Handle<String> input = factory->NewStringFromAscii(CStrVector("fooofo"));
927 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); 934 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
928 Address start_adr = seq_input->GetCharsAddress(); 935 Address start_adr = seq_input->GetCharsAddress();
929 936
930 int output[4]; 937 int output[4];
931 NativeRegExpMacroAssembler::Result result = 938 NativeRegExpMacroAssembler::Result result =
932 Execute(*code, 939 Execute(*code,
933 *input, 940 *input,
934 0, 941 0,
935 start_adr, 942 start_adr,
936 start_adr + input->length(), 943 start_adr + input->length(),
937 output); 944 output);
938 945
939 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); 946 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result);
940 CHECK_EQ(0, output[0]); 947 CHECK_EQ(0, output[0]);
941 CHECK_EQ(2, output[1]); 948 CHECK_EQ(2, output[1]);
942 CHECK_EQ(6, output[2]); 949 CHECK_EQ(6, output[2]);
943 CHECK_EQ(-1, output[3]); 950 CHECK_EQ(-1, output[3]);
944 } 951 }
945 952
946 953
947 TEST(MacroAssemblerNativeBackReferenceUC16) { 954 TEST(MacroAssemblerNativeBackReferenceUC16) {
948 v8::V8::Initialize(); 955 v8::V8::Initialize();
949 ContextInitializer initializer; 956 ContextInitializer initializer;
957 Factory* factory = Isolate::Current()->factory();
950 958
951 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::UC16, 4); 959 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::UC16, 4);
952 960
953 m.WriteCurrentPositionToRegister(0, 0); 961 m.WriteCurrentPositionToRegister(0, 0);
954 m.AdvanceCurrentPosition(2); 962 m.AdvanceCurrentPosition(2);
955 m.WriteCurrentPositionToRegister(1, 0); 963 m.WriteCurrentPositionToRegister(1, 0);
956 Label nomatch; 964 Label nomatch;
957 m.CheckNotBackReference(0, &nomatch); 965 m.CheckNotBackReference(0, &nomatch);
958 m.Fail(); 966 m.Fail();
959 m.Bind(&nomatch); 967 m.Bind(&nomatch);
960 m.AdvanceCurrentPosition(2); 968 m.AdvanceCurrentPosition(2);
961 Label missing_match; 969 Label missing_match;
962 m.CheckNotBackReference(0, &missing_match); 970 m.CheckNotBackReference(0, &missing_match);
963 m.WriteCurrentPositionToRegister(2, 0); 971 m.WriteCurrentPositionToRegister(2, 0);
964 m.Succeed(); 972 m.Succeed();
965 m.Bind(&missing_match); 973 m.Bind(&missing_match);
966 m.Fail(); 974 m.Fail();
967 975
968 Handle<String> source = FACTORY->NewStringFromAscii(CStrVector("^(..)..\1")); 976 Handle<String> source = factory->NewStringFromAscii(CStrVector("^(..)..\1"));
969 Handle<Object> code_object = m.GetCode(source); 977 Handle<Object> code_object = m.GetCode(source);
970 Handle<Code> code = Handle<Code>::cast(code_object); 978 Handle<Code> code = Handle<Code>::cast(code_object);
971 979
972 const uc16 input_data[6] = {'f', 0x2028, 'o', 'o', 'f', 0x2028}; 980 const uc16 input_data[6] = {'f', 0x2028, 'o', 'o', 'f', 0x2028};
973 Handle<String> input = 981 Handle<String> input =
974 FACTORY->NewStringFromTwoByte(Vector<const uc16>(input_data, 6)); 982 factory->NewStringFromTwoByte(Vector<const uc16>(input_data, 6));
975 Handle<SeqTwoByteString> seq_input = Handle<SeqTwoByteString>::cast(input); 983 Handle<SeqTwoByteString> seq_input = Handle<SeqTwoByteString>::cast(input);
976 Address start_adr = seq_input->GetCharsAddress(); 984 Address start_adr = seq_input->GetCharsAddress();
977 985
978 int output[4]; 986 int output[4];
979 NativeRegExpMacroAssembler::Result result = 987 NativeRegExpMacroAssembler::Result result =
980 Execute(*code, 988 Execute(*code,
981 *input, 989 *input,
982 0, 990 0,
983 start_adr, 991 start_adr,
984 start_adr + input->length() * 2, 992 start_adr + input->length() * 2,
985 output); 993 output);
986 994
987 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); 995 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result);
988 CHECK_EQ(0, output[0]); 996 CHECK_EQ(0, output[0]);
989 CHECK_EQ(2, output[1]); 997 CHECK_EQ(2, output[1]);
990 CHECK_EQ(6, output[2]); 998 CHECK_EQ(6, output[2]);
991 CHECK_EQ(-1, output[3]); 999 CHECK_EQ(-1, output[3]);
992 } 1000 }
993 1001
994 1002
995 1003
996 TEST(MacroAssemblernativeAtStart) { 1004 TEST(MacroAssemblernativeAtStart) {
997 v8::V8::Initialize(); 1005 v8::V8::Initialize();
998 ContextInitializer initializer; 1006 ContextInitializer initializer;
1007 Factory* factory = Isolate::Current()->factory();
999 1008
1000 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 0); 1009 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 0);
1001 1010
1002 Label not_at_start, newline, fail; 1011 Label not_at_start, newline, fail;
1003 m.CheckNotAtStart(&not_at_start); 1012 m.CheckNotAtStart(&not_at_start);
1004 // Check that prevchar = '\n' and current = 'f'. 1013 // Check that prevchar = '\n' and current = 'f'.
1005 m.CheckCharacter('\n', &newline); 1014 m.CheckCharacter('\n', &newline);
1006 m.Bind(&fail); 1015 m.Bind(&fail);
1007 m.Fail(); 1016 m.Fail();
1008 m.Bind(&newline); 1017 m.Bind(&newline);
1009 m.LoadCurrentCharacter(0, &fail); 1018 m.LoadCurrentCharacter(0, &fail);
1010 m.CheckNotCharacter('f', &fail); 1019 m.CheckNotCharacter('f', &fail);
1011 m.Succeed(); 1020 m.Succeed();
1012 1021
1013 m.Bind(&not_at_start); 1022 m.Bind(&not_at_start);
1014 // Check that prevchar = 'o' and current = 'b'. 1023 // Check that prevchar = 'o' and current = 'b'.
1015 Label prevo; 1024 Label prevo;
1016 m.CheckCharacter('o', &prevo); 1025 m.CheckCharacter('o', &prevo);
1017 m.Fail(); 1026 m.Fail();
1018 m.Bind(&prevo); 1027 m.Bind(&prevo);
1019 m.LoadCurrentCharacter(0, &fail); 1028 m.LoadCurrentCharacter(0, &fail);
1020 m.CheckNotCharacter('b', &fail); 1029 m.CheckNotCharacter('b', &fail);
1021 m.Succeed(); 1030 m.Succeed();
1022 1031
1023 Handle<String> source = FACTORY->NewStringFromAscii(CStrVector("(^f|ob)")); 1032 Handle<String> source = factory->NewStringFromAscii(CStrVector("(^f|ob)"));
1024 Handle<Object> code_object = m.GetCode(source); 1033 Handle<Object> code_object = m.GetCode(source);
1025 Handle<Code> code = Handle<Code>::cast(code_object); 1034 Handle<Code> code = Handle<Code>::cast(code_object);
1026 1035
1027 Handle<String> input = FACTORY->NewStringFromAscii(CStrVector("foobar")); 1036 Handle<String> input = factory->NewStringFromAscii(CStrVector("foobar"));
1028 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); 1037 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
1029 Address start_adr = seq_input->GetCharsAddress(); 1038 Address start_adr = seq_input->GetCharsAddress();
1030 1039
1031 NativeRegExpMacroAssembler::Result result = 1040 NativeRegExpMacroAssembler::Result result =
1032 Execute(*code, 1041 Execute(*code,
1033 *input, 1042 *input,
1034 0, 1043 0,
1035 start_adr, 1044 start_adr,
1036 start_adr + input->length(), 1045 start_adr + input->length(),
1037 NULL); 1046 NULL);
1038 1047
1039 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); 1048 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result);
1040 1049
1041 result = Execute(*code, 1050 result = Execute(*code,
1042 *input, 1051 *input,
1043 3, 1052 3,
1044 start_adr + 3, 1053 start_adr + 3,
1045 start_adr + input->length(), 1054 start_adr + input->length(),
1046 NULL); 1055 NULL);
1047 1056
1048 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); 1057 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result);
1049 } 1058 }
1050 1059
1051 1060
1052 TEST(MacroAssemblerNativeBackRefNoCase) { 1061 TEST(MacroAssemblerNativeBackRefNoCase) {
1053 v8::V8::Initialize(); 1062 v8::V8::Initialize();
1054 ContextInitializer initializer; 1063 ContextInitializer initializer;
1064 Factory* factory = Isolate::Current()->factory();
1055 1065
1056 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4); 1066 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4);
1057 1067
1058 Label fail, succ; 1068 Label fail, succ;
1059 1069
1060 m.WriteCurrentPositionToRegister(0, 0); 1070 m.WriteCurrentPositionToRegister(0, 0);
1061 m.WriteCurrentPositionToRegister(2, 0); 1071 m.WriteCurrentPositionToRegister(2, 0);
1062 m.AdvanceCurrentPosition(3); 1072 m.AdvanceCurrentPosition(3);
1063 m.WriteCurrentPositionToRegister(3, 0); 1073 m.WriteCurrentPositionToRegister(3, 0);
1064 m.CheckNotBackReferenceIgnoreCase(2, &fail); // Match "AbC". 1074 m.CheckNotBackReferenceIgnoreCase(2, &fail); // Match "AbC".
1065 m.CheckNotBackReferenceIgnoreCase(2, &fail); // Match "ABC". 1075 m.CheckNotBackReferenceIgnoreCase(2, &fail); // Match "ABC".
1066 Label expected_fail; 1076 Label expected_fail;
1067 m.CheckNotBackReferenceIgnoreCase(2, &expected_fail); 1077 m.CheckNotBackReferenceIgnoreCase(2, &expected_fail);
1068 m.Bind(&fail); 1078 m.Bind(&fail);
1069 m.Fail(); 1079 m.Fail();
1070 1080
1071 m.Bind(&expected_fail); 1081 m.Bind(&expected_fail);
1072 m.AdvanceCurrentPosition(3); // Skip "xYz" 1082 m.AdvanceCurrentPosition(3); // Skip "xYz"
1073 m.CheckNotBackReferenceIgnoreCase(2, &succ); 1083 m.CheckNotBackReferenceIgnoreCase(2, &succ);
1074 m.Fail(); 1084 m.Fail();
1075 1085
1076 m.Bind(&succ); 1086 m.Bind(&succ);
1077 m.WriteCurrentPositionToRegister(1, 0); 1087 m.WriteCurrentPositionToRegister(1, 0);
1078 m.Succeed(); 1088 m.Succeed();
1079 1089
1080 Handle<String> source = 1090 Handle<String> source =
1081 FACTORY->NewStringFromAscii(CStrVector("^(abc)\1\1(?!\1)...(?!\1)")); 1091 factory->NewStringFromAscii(CStrVector("^(abc)\1\1(?!\1)...(?!\1)"));
1082 Handle<Object> code_object = m.GetCode(source); 1092 Handle<Object> code_object = m.GetCode(source);
1083 Handle<Code> code = Handle<Code>::cast(code_object); 1093 Handle<Code> code = Handle<Code>::cast(code_object);
1084 1094
1085 Handle<String> input = 1095 Handle<String> input =
1086 FACTORY->NewStringFromAscii(CStrVector("aBcAbCABCxYzab")); 1096 factory->NewStringFromAscii(CStrVector("aBcAbCABCxYzab"));
1087 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); 1097 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
1088 Address start_adr = seq_input->GetCharsAddress(); 1098 Address start_adr = seq_input->GetCharsAddress();
1089 1099
1090 int output[4]; 1100 int output[4];
1091 NativeRegExpMacroAssembler::Result result = 1101 NativeRegExpMacroAssembler::Result result =
1092 Execute(*code, 1102 Execute(*code,
1093 *input, 1103 *input,
1094 0, 1104 0,
1095 start_adr, 1105 start_adr,
1096 start_adr + input->length(), 1106 start_adr + input->length(),
1097 output); 1107 output);
1098 1108
1099 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); 1109 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result);
1100 CHECK_EQ(0, output[0]); 1110 CHECK_EQ(0, output[0]);
1101 CHECK_EQ(12, output[1]); 1111 CHECK_EQ(12, output[1]);
1102 CHECK_EQ(0, output[2]); 1112 CHECK_EQ(0, output[2]);
1103 CHECK_EQ(3, output[3]); 1113 CHECK_EQ(3, output[3]);
1104 } 1114 }
1105 1115
1106 1116
1107 1117
1108 TEST(MacroAssemblerNativeRegisters) { 1118 TEST(MacroAssemblerNativeRegisters) {
1109 v8::V8::Initialize(); 1119 v8::V8::Initialize();
1110 ContextInitializer initializer; 1120 ContextInitializer initializer;
1121 Factory* factory = Isolate::Current()->factory();
1111 1122
1112 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 6); 1123 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 6);
1113 1124
1114 uc16 foo_chars[3] = {'f', 'o', 'o'}; 1125 uc16 foo_chars[3] = {'f', 'o', 'o'};
1115 Vector<const uc16> foo(foo_chars, 3); 1126 Vector<const uc16> foo(foo_chars, 3);
1116 1127
1117 enum registers { out1, out2, out3, out4, out5, out6, sp, loop_cnt }; 1128 enum registers { out1, out2, out3, out4, out5, out6, sp, loop_cnt };
1118 Label fail; 1129 Label fail;
1119 Label backtrack; 1130 Label backtrack;
1120 m.WriteCurrentPositionToRegister(out1, 0); // Output: [0] 1131 m.WriteCurrentPositionToRegister(out1, 0); // Output: [0]
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1169 m.Bind(&exit_loop3); 1180 m.Bind(&exit_loop3);
1170 m.PopCurrentPosition(); 1181 m.PopCurrentPosition();
1171 m.WriteCurrentPositionToRegister(out5, 0); // [0,3,6,9,9,-1] 1182 m.WriteCurrentPositionToRegister(out5, 0); // [0,3,6,9,9,-1]
1172 1183
1173 m.Succeed(); 1184 m.Succeed();
1174 1185
1175 m.Bind(&fail); 1186 m.Bind(&fail);
1176 m.Fail(); 1187 m.Fail();
1177 1188
1178 Handle<String> source = 1189 Handle<String> source =
1179 FACTORY->NewStringFromAscii(CStrVector("<loop test>")); 1190 factory->NewStringFromAscii(CStrVector("<loop test>"));
1180 Handle<Object> code_object = m.GetCode(source); 1191 Handle<Object> code_object = m.GetCode(source);
1181 Handle<Code> code = Handle<Code>::cast(code_object); 1192 Handle<Code> code = Handle<Code>::cast(code_object);
1182 1193
1183 // String long enough for test (content doesn't matter). 1194 // String long enough for test (content doesn't matter).
1184 Handle<String> input = 1195 Handle<String> input =
1185 FACTORY->NewStringFromAscii(CStrVector("foofoofoofoofoo")); 1196 factory->NewStringFromAscii(CStrVector("foofoofoofoofoo"));
1186 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); 1197 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
1187 Address start_adr = seq_input->GetCharsAddress(); 1198 Address start_adr = seq_input->GetCharsAddress();
1188 1199
1189 int output[6]; 1200 int output[6];
1190 NativeRegExpMacroAssembler::Result result = 1201 NativeRegExpMacroAssembler::Result result =
1191 Execute(*code, 1202 Execute(*code,
1192 *input, 1203 *input,
1193 0, 1204 0,
1194 start_adr, 1205 start_adr,
1195 start_adr + input->length(), 1206 start_adr + input->length(),
1196 output); 1207 output);
1197 1208
1198 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); 1209 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result);
1199 CHECK_EQ(0, output[0]); 1210 CHECK_EQ(0, output[0]);
1200 CHECK_EQ(3, output[1]); 1211 CHECK_EQ(3, output[1]);
1201 CHECK_EQ(6, output[2]); 1212 CHECK_EQ(6, output[2]);
1202 CHECK_EQ(9, output[3]); 1213 CHECK_EQ(9, output[3]);
1203 CHECK_EQ(9, output[4]); 1214 CHECK_EQ(9, output[4]);
1204 CHECK_EQ(-1, output[5]); 1215 CHECK_EQ(-1, output[5]);
1205 } 1216 }
1206 1217
1207 1218
1208 TEST(MacroAssemblerStackOverflow) { 1219 TEST(MacroAssemblerStackOverflow) {
1209 v8::V8::Initialize(); 1220 v8::V8::Initialize();
1210 ContextInitializer initializer; 1221 ContextInitializer initializer;
1222 Isolate* isolate = Isolate::Current();
1223 Factory* factory = isolate->factory();
1211 1224
1212 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 0); 1225 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 0);
1213 1226
1214 Label loop; 1227 Label loop;
1215 m.Bind(&loop); 1228 m.Bind(&loop);
1216 m.PushBacktrack(&loop); 1229 m.PushBacktrack(&loop);
1217 m.GoTo(&loop); 1230 m.GoTo(&loop);
1218 1231
1219 Handle<String> source = 1232 Handle<String> source =
1220 FACTORY->NewStringFromAscii(CStrVector("<stack overflow test>")); 1233 factory->NewStringFromAscii(CStrVector("<stack overflow test>"));
1221 Handle<Object> code_object = m.GetCode(source); 1234 Handle<Object> code_object = m.GetCode(source);
1222 Handle<Code> code = Handle<Code>::cast(code_object); 1235 Handle<Code> code = Handle<Code>::cast(code_object);
1223 1236
1224 // String long enough for test (content doesn't matter). 1237 // String long enough for test (content doesn't matter).
1225 Handle<String> input = 1238 Handle<String> input =
1226 FACTORY->NewStringFromAscii(CStrVector("dummy")); 1239 factory->NewStringFromAscii(CStrVector("dummy"));
1227 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); 1240 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
1228 Address start_adr = seq_input->GetCharsAddress(); 1241 Address start_adr = seq_input->GetCharsAddress();
1229 1242
1230 NativeRegExpMacroAssembler::Result result = 1243 NativeRegExpMacroAssembler::Result result =
1231 Execute(*code, 1244 Execute(*code,
1232 *input, 1245 *input,
1233 0, 1246 0,
1234 start_adr, 1247 start_adr,
1235 start_adr + input->length(), 1248 start_adr + input->length(),
1236 NULL); 1249 NULL);
1237 1250
1238 CHECK_EQ(NativeRegExpMacroAssembler::EXCEPTION, result); 1251 CHECK_EQ(NativeRegExpMacroAssembler::EXCEPTION, result);
1239 CHECK(Isolate::Current()->has_pending_exception()); 1252 CHECK(isolate->has_pending_exception());
1240 Isolate::Current()->clear_pending_exception(); 1253 isolate->clear_pending_exception();
1241 } 1254 }
1242 1255
1243 1256
1244 TEST(MacroAssemblerNativeLotsOfRegisters) { 1257 TEST(MacroAssemblerNativeLotsOfRegisters) {
1245 v8::V8::Initialize(); 1258 v8::V8::Initialize();
1246 ContextInitializer initializer; 1259 ContextInitializer initializer;
1260 Isolate* isolate = Isolate::Current();
1261 Factory* factory = isolate->factory();
1247 1262
1248 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 2); 1263 ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 2);
1249 1264
1250 // At least 2048, to ensure the allocated space for registers 1265 // At least 2048, to ensure the allocated space for registers
1251 // span one full page. 1266 // span one full page.
1252 const int large_number = 8000; 1267 const int large_number = 8000;
1253 m.WriteCurrentPositionToRegister(large_number, 42); 1268 m.WriteCurrentPositionToRegister(large_number, 42);
1254 m.WriteCurrentPositionToRegister(0, 0); 1269 m.WriteCurrentPositionToRegister(0, 0);
1255 m.WriteCurrentPositionToRegister(1, 1); 1270 m.WriteCurrentPositionToRegister(1, 1);
1256 Label done; 1271 Label done;
1257 m.CheckNotBackReference(0, &done); // Performs a system-stack push. 1272 m.CheckNotBackReference(0, &done); // Performs a system-stack push.
1258 m.Bind(&done); 1273 m.Bind(&done);
1259 m.PushRegister(large_number, RegExpMacroAssembler::kNoStackLimitCheck); 1274 m.PushRegister(large_number, RegExpMacroAssembler::kNoStackLimitCheck);
1260 m.PopRegister(1); 1275 m.PopRegister(1);
1261 m.Succeed(); 1276 m.Succeed();
1262 1277
1263 Handle<String> source = 1278 Handle<String> source =
1264 FACTORY->NewStringFromAscii(CStrVector("<huge register space test>")); 1279 factory->NewStringFromAscii(CStrVector("<huge register space test>"));
1265 Handle<Object> code_object = m.GetCode(source); 1280 Handle<Object> code_object = m.GetCode(source);
1266 Handle<Code> code = Handle<Code>::cast(code_object); 1281 Handle<Code> code = Handle<Code>::cast(code_object);
1267 1282
1268 // String long enough for test (content doesn't matter). 1283 // String long enough for test (content doesn't matter).
1269 Handle<String> input = 1284 Handle<String> input =
1270 FACTORY->NewStringFromAscii(CStrVector("sample text")); 1285 factory->NewStringFromAscii(CStrVector("sample text"));
1271 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input); 1286 Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
1272 Address start_adr = seq_input->GetCharsAddress(); 1287 Address start_adr = seq_input->GetCharsAddress();
1273 1288
1274 int captures[2]; 1289 int captures[2];
1275 NativeRegExpMacroAssembler::Result result = 1290 NativeRegExpMacroAssembler::Result result =
1276 Execute(*code, 1291 Execute(*code,
1277 *input, 1292 *input,
1278 0, 1293 0,
1279 start_adr, 1294 start_adr,
1280 start_adr + input->length(), 1295 start_adr + input->length(),
1281 captures); 1296 captures);
1282 1297
1283 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result); 1298 CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result);
1284 CHECK_EQ(0, captures[0]); 1299 CHECK_EQ(0, captures[0]);
1285 CHECK_EQ(42, captures[1]); 1300 CHECK_EQ(42, captures[1]);
1286 1301
1287 Isolate::Current()->clear_pending_exception(); 1302 isolate->clear_pending_exception();
1288 } 1303 }
1289 1304
1290 #else // V8_INTERPRETED_REGEXP 1305 #else // V8_INTERPRETED_REGEXP
1291 1306
1292 TEST(MacroAssembler) { 1307 TEST(MacroAssembler) {
1293 V8::Initialize(NULL); 1308 V8::Initialize(NULL);
1294 byte codes[1024]; 1309 byte codes[1024];
1295 RegExpMacroAssemblerIrregexp m(Vector<byte>(codes, 1024)); 1310 RegExpMacroAssemblerIrregexp m(Vector<byte>(codes, 1024));
1296 // ^f(o)o. 1311 // ^f(o)o.
1297 Label fail, fail2, start; 1312 Label fail, fail2, start;
(...skipping 22 matching lines...) Expand all
1320 m.Succeed(); 1335 m.Succeed();
1321 1336
1322 m.Bind(&fail); 1337 m.Bind(&fail);
1323 m.Backtrack(); 1338 m.Backtrack();
1324 m.Succeed(); 1339 m.Succeed();
1325 1340
1326 m.Bind(&fail2); 1341 m.Bind(&fail2);
1327 m.PopRegister(0); 1342 m.PopRegister(0);
1328 m.Fail(); 1343 m.Fail();
1329 1344
1330 v8::HandleScope scope; 1345 Isolate* isolate = Isolate::Current();
1346 Factory* factory = isolate->factory();
1347 HandleScope scope(isolate);
1331 1348
1332 Handle<String> source = FACTORY->NewStringFromAscii(CStrVector("^f(o)o")); 1349 Handle<String> source = factory->NewStringFromAscii(CStrVector("^f(o)o"));
1333 Handle<ByteArray> array = Handle<ByteArray>::cast(m.GetCode(source)); 1350 Handle<ByteArray> array = Handle<ByteArray>::cast(m.GetCode(source));
1334 int captures[5]; 1351 int captures[5];
1335 1352
1336 const uc16 str1[] = {'f', 'o', 'o', 'b', 'a', 'r'}; 1353 const uc16 str1[] = {'f', 'o', 'o', 'b', 'a', 'r'};
1337 Handle<String> f1_16 = 1354 Handle<String> f1_16 =
1338 FACTORY->NewStringFromTwoByte(Vector<const uc16>(str1, 6)); 1355 factory->NewStringFromTwoByte(Vector<const uc16>(str1, 6));
1339 1356
1340 CHECK(IrregexpInterpreter::Match(array, f1_16, captures, 0)); 1357 CHECK(IrregexpInterpreter::Match(isolate, array, f1_16, captures, 0));
1341 CHECK_EQ(0, captures[0]); 1358 CHECK_EQ(0, captures[0]);
1342 CHECK_EQ(3, captures[1]); 1359 CHECK_EQ(3, captures[1]);
1343 CHECK_EQ(1, captures[2]); 1360 CHECK_EQ(1, captures[2]);
1344 CHECK_EQ(2, captures[3]); 1361 CHECK_EQ(2, captures[3]);
1345 CHECK_EQ(84, captures[4]); 1362 CHECK_EQ(84, captures[4]);
1346 1363
1347 const uc16 str2[] = {'b', 'a', 'r', 'f', 'o', 'o'}; 1364 const uc16 str2[] = {'b', 'a', 'r', 'f', 'o', 'o'};
1348 Handle<String> f2_16 = 1365 Handle<String> f2_16 =
1349 FACTORY->NewStringFromTwoByte(Vector<const uc16>(str2, 6)); 1366 factory->NewStringFromTwoByte(Vector<const uc16>(str2, 6));
1350 1367
1351 CHECK(!IrregexpInterpreter::Match(array, f2_16, captures, 0)); 1368 CHECK(!IrregexpInterpreter::Match(isolate, array, f2_16, captures, 0));
1352 CHECK_EQ(42, captures[0]); 1369 CHECK_EQ(42, captures[0]);
1353 } 1370 }
1354 1371
1355 #endif // V8_INTERPRETED_REGEXP 1372 #endif // V8_INTERPRETED_REGEXP
1356 1373
1357 1374
1358 TEST(AddInverseToTable) { 1375 TEST(AddInverseToTable) {
1359 v8::internal::V8::Initialize(NULL); 1376 v8::internal::V8::Initialize(NULL);
1360 static const int kLimit = 1000; 1377 static const int kLimit = 1000;
1361 static const int kRangeCount = 16; 1378 static const int kRangeCount = 16;
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
1800 bool in_second = CharacterInSet(&l2, i); 1817 bool in_second = CharacterInSet(&l2, i);
1801 CHECK((in_first || in_second) == CharacterInSet(&all, i)); 1818 CHECK((in_first || in_second) == CharacterInSet(&all, i));
1802 } 1819 }
1803 } 1820 }
1804 1821
1805 1822
1806 TEST(Graph) { 1823 TEST(Graph) {
1807 V8::Initialize(NULL); 1824 V8::Initialize(NULL);
1808 Execute("\\b\\w+\\b", false, true, true); 1825 Execute("\\b\\w+\\b", false, true, true);
1809 } 1826 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698