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

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

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

Powered by Google App Engine
This is Rietveld 408576698