Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ Go()

override void System.Text.RegularExpressions.RegexInterpreter.Go ( )
inlineprotected

Definition at line 572 of file RegexInterpreter.cs.

573 {
575 _codepos = 0;
576 int num = -1;
577 while (true)
578 {
579 if (num >= 0)
580 {
581 Advance(num);
582 num = -1;
583 }
584 CheckTimeout();
585 switch (_operator)
586 {
587 case 40:
588 return;
589 case 38:
590 Goto(Operand(0));
591 continue;
592 case 37:
593 if (IsMatched(Operand(0)))
594 {
595 num = 1;
596 continue;
597 }
598 break;
599 case 23:
601 num = 1;
602 continue;
603 case 151:
604 TrackPop();
606 Goto(Operand(0));
607 continue;
608 case 31:
610 TrackPush();
611 num = 0;
612 continue;
613 case 30:
614 StackPush(-1);
615 TrackPush();
616 num = 0;
617 continue;
618 case 158:
619 case 159:
620 StackPop();
621 break;
622 case 33:
623 StackPop();
626 num = 0;
627 continue;
628 case 161:
629 TrackPop();
631 break;
632 case 32:
633 if (Operand(1) == -1 || IsMatched(Operand(1)))
634 {
635 StackPop();
636 if (Operand(1) != -1)
637 {
639 }
640 else
641 {
643 }
645 num = 2;
646 continue;
647 }
648 break;
649 case 160:
650 TrackPop();
652 Uncapture();
653 if (Operand(0) != -1 && Operand(1) != -1)
654 {
655 Uncapture();
656 }
657 break;
658 case 24:
659 StackPop();
660 if (runtextpos != StackPeek())
661 {
664 Goto(Operand(0));
665 }
666 else
667 {
669 num = 1;
670 }
671 continue;
672 case 152:
673 TrackPop(2);
674 StackPop();
677 num = 1;
678 continue;
679 case 280:
680 TrackPop();
682 break;
683 case 25:
684 {
685 StackPop();
686 int num26 = StackPeek();
687 if (runtextpos != num26)
688 {
689 if (num26 != -1)
690 {
691 TrackPush(num26, runtextpos);
692 }
693 else
694 {
696 }
697 }
698 else
699 {
700 StackPush(num26);
702 }
703 num = 1;
704 continue;
705 }
706 case 153:
707 {
708 TrackPop(2);
709 int i2 = TrackPeek(1);
711 StackPush(i2);
712 runtextpos = i2;
713 Goto(Operand(0));
714 continue;
715 }
716 case 281:
717 StackPop();
718 TrackPop();
720 break;
721 case 27:
723 TrackPush();
724 num = 1;
725 continue;
726 case 26:
727 StackPush(-1, Operand(0));
728 TrackPush();
729 num = 1;
730 continue;
731 case 154:
732 case 155:
733 case 162:
734 StackPop(2);
735 break;
736 case 28:
737 {
738 StackPop(2);
739 int num17 = StackPeek();
740 int num18 = StackPeek(1);
741 int num19 = runtextpos - num17;
742 if (num18 >= Operand(1) || (num19 == 0 && num18 >= 0))
743 {
744 TrackPush2(num17, num18);
745 num = 2;
746 }
747 else
748 {
749 TrackPush(num17);
750 StackPush(runtextpos, num18 + 1);
751 Goto(Operand(0));
752 }
753 continue;
754 }
755 case 156:
756 TrackPop();
757 StackPop(2);
758 if (StackPeek(1) > 0)
759 {
761 TrackPush2(TrackPeek(), StackPeek(1) - 1);
762 num = 2;
763 continue;
764 }
765 StackPush(TrackPeek(), StackPeek(1) - 1);
766 break;
767 case 284:
768 TrackPop(2);
770 break;
771 case 29:
772 {
773 StackPop(2);
774 int i = StackPeek();
775 int num8 = StackPeek(1);
776 if (num8 < 0)
777 {
778 TrackPush2(i);
779 StackPush(runtextpos, num8 + 1);
780 Goto(Operand(0));
781 }
782 else
783 {
784 TrackPush(i, num8, runtextpos);
785 num = 2;
786 }
787 continue;
788 }
789 case 157:
790 {
791 TrackPop(3);
792 int num29 = TrackPeek();
793 int num30 = TrackPeek(2);
794 if (TrackPeek(1) < Operand(1) && num30 != num29)
795 {
796 runtextpos = num30;
797 StackPush(num30, TrackPeek(1) + 1);
798 TrackPush2(num29);
799 Goto(Operand(0));
800 continue;
801 }
803 break;
804 }
805 case 285:
806 TrackPop();
807 StackPop(2);
808 StackPush(TrackPeek(), StackPeek(1) - 1);
809 break;
810 case 34:
812 TrackPush();
813 num = 0;
814 continue;
815 case 35:
816 StackPop(2);
818 while (Crawlpos() != StackPeek(1))
819 {
820 Uncapture();
821 }
822 break;
823 case 36:
824 StackPop(2);
827 num = 0;
828 continue;
829 case 164:
830 TrackPop();
831 while (Crawlpos() != TrackPeek())
832 {
833 Uncapture();
834 }
835 break;
836 case 14:
837 if (Leftchars() <= 0 || runtext[runtextpos - 1] == '\n')
838 {
839 num = 0;
840 continue;
841 }
842 break;
843 case 15:
844 if (Rightchars() <= 0 || runtext[runtextpos] == '\n')
845 {
846 num = 0;
847 continue;
848 }
849 break;
850 case 16:
852 {
853 num = 0;
854 continue;
855 }
856 break;
857 case 17:
859 {
860 num = 0;
861 continue;
862 }
863 break;
864 case 41:
866 {
867 num = 0;
868 continue;
869 }
870 break;
871 case 42:
873 {
874 num = 0;
875 continue;
876 }
877 break;
878 case 18:
879 if (Leftchars() <= 0)
880 {
881 num = 0;
882 continue;
883 }
884 break;
885 case 19:
887 {
888 num = 0;
889 continue;
890 }
891 break;
892 case 20:
893 if (Rightchars() <= 1 && (Rightchars() != 1 || runtext[runtextpos] == '\n'))
894 {
895 num = 0;
896 continue;
897 }
898 break;
899 case 21:
900 if (Rightchars() <= 0)
901 {
902 num = 0;
903 continue;
904 }
905 break;
906 case 9:
907 if (Forwardchars() >= 1 && Forwardcharnext() == (ushort)Operand(0))
908 {
909 num = 1;
910 continue;
911 }
912 break;
913 case 10:
914 if (Forwardchars() >= 1 && Forwardcharnext() != (ushort)Operand(0))
915 {
916 num = 1;
917 continue;
918 }
919 break;
920 case 11:
921 if (Forwardchars() >= 1)
922 {
923 int num7 = Operand(0);
924 if (RegexCharClass.CharInClass(Forwardcharnext(), _code.Strings[num7], ref _code.StringsAsciiLookup[num7]))
925 {
926 num = 1;
927 continue;
928 }
929 }
930 break;
931 case 12:
933 {
934 num = 1;
935 continue;
936 }
937 break;
938 case 13:
939 {
940 int cap = Operand(0);
941 if (IsMatched(cap))
942 {
943 if (!MatchRef(MatchIndex(cap), MatchLength(cap)))
944 {
945 break;
946 }
947 }
948 else if ((runregex.roptions & RegexOptions.ECMAScript) == 0)
949 {
950 break;
951 }
952 num = 1;
953 continue;
954 }
955 case 0:
956 {
957 int num28 = Operand(1);
958 if (Forwardchars() < num28)
959 {
960 break;
961 }
962 char c4 = (char)Operand(0);
963 while (num28-- > 0)
964 {
965 if (Forwardcharnext() != c4)
966 {
967 goto end_IL_0037;
968 }
969 }
970 num = 2;
971 continue;
972 }
973 case 1:
974 {
975 int num27 = Operand(1);
976 if (Forwardchars() < num27)
977 {
978 break;
979 }
980 char c3 = (char)Operand(0);
981 while (num27-- > 0)
982 {
983 if (Forwardcharnext() == c3)
984 {
985 goto end_IL_0037;
986 }
987 }
988 num = 2;
989 continue;
990 }
991 case 2:
992 {
993 int num24 = Operand(1);
994 if (Forwardchars() < num24)
995 {
996 break;
997 }
998 int num25 = Operand(0);
999 string set2 = _code.Strings[num25];
1000 ref int[] asciiResultCache2 = ref _code.StringsAsciiLookup[num25];
1001 while (num24-- > 0)
1002 {
1003 if ((uint)num24 % 2048u == 0)
1004 {
1005 CheckTimeout();
1006 }
1007 if (!RegexCharClass.CharInClass(Forwardcharnext(), set2, ref asciiResultCache2))
1008 {
1009 goto end_IL_0037;
1010 }
1011 }
1012 num = 2;
1013 continue;
1014 }
1015 case 3:
1016 case 43:
1017 {
1018 int num22 = Math.Min(Operand(1), Forwardchars());
1019 char c2 = (char)Operand(0);
1020 int num23;
1021 for (num23 = num22; num23 > 0; num23--)
1022 {
1023 if (Forwardcharnext() != c2)
1024 {
1025 Backwardnext();
1026 break;
1027 }
1028 }
1029 if (num22 > num23 && _operator == 3)
1030 {
1031 TrackPush(num22 - num23 - 1, runtextpos - Bump());
1032 }
1033 num = 2;
1034 continue;
1035 }
1036 case 4:
1037 case 44:
1038 {
1039 int num20 = Math.Min(Operand(1), Forwardchars());
1040 char c = (char)Operand(0);
1041 int num21;
1043 {
1044 num21 = runtext.AsSpan(runtextpos, num20).IndexOf(c);
1045 if (num21 == -1)
1046 {
1047 runtextpos += num20;
1048 num21 = 0;
1049 }
1050 else
1051 {
1052 runtextpos += num21;
1053 num21 = num20 - num21;
1054 }
1055 }
1056 else
1057 {
1058 for (num21 = num20; num21 > 0; num21--)
1059 {
1060 if (Forwardcharnext() == c)
1061 {
1062 Backwardnext();
1063 break;
1064 }
1065 }
1066 }
1067 if (num20 > num21 && _operator == 4)
1068 {
1069 TrackPush(num20 - num21 - 1, runtextpos - Bump());
1070 }
1071 num = 2;
1072 continue;
1073 }
1074 case 5:
1075 case 45:
1076 {
1077 int num14 = Math.Min(Operand(1), Forwardchars());
1078 int num15 = Operand(0);
1079 string set = _code.Strings[num15];
1080 ref int[] asciiResultCache = ref _code.StringsAsciiLookup[num15];
1081 int num16;
1082 for (num16 = num14; num16 > 0; num16--)
1083 {
1084 if ((uint)num16 % 2048u == 0)
1085 {
1086 CheckTimeout();
1087 }
1088 if (!RegexCharClass.CharInClass(Forwardcharnext(), set, ref asciiResultCache))
1089 {
1090 Backwardnext();
1091 break;
1092 }
1093 }
1094 if (num14 > num16 && _operator == 5)
1095 {
1096 TrackPush(num14 - num16 - 1, runtextpos - Bump());
1097 }
1098 num = 2;
1099 continue;
1100 }
1101 case 131:
1102 case 132:
1103 case 133:
1104 {
1105 TrackPop(2);
1106 int num12 = TrackPeek();
1107 int num13 = (runtextpos = TrackPeek(1));
1108 if (num12 > 0)
1109 {
1110 TrackPush(num12 - 1, num13 - Bump());
1111 }
1112 num = 2;
1113 continue;
1114 }
1115 case 6:
1116 case 7:
1117 case 8:
1118 {
1119 int num11 = Math.Min(Operand(1), Forwardchars());
1120 if (num11 > 0)
1121 {
1122 TrackPush(num11 - 1, runtextpos);
1123 }
1124 num = 2;
1125 continue;
1126 }
1127 case 134:
1128 {
1129 TrackPop(2);
1130 int num9 = (runtextpos = TrackPeek(1));
1131 if (Forwardcharnext() == (ushort)Operand(0))
1132 {
1133 int num10 = TrackPeek();
1134 if (num10 > 0)
1135 {
1136 TrackPush(num10 - 1, num9 + Bump());
1137 }
1138 num = 2;
1139 continue;
1140 }
1141 break;
1142 }
1143 case 135:
1144 {
1145 TrackPop(2);
1146 int num5 = (runtextpos = TrackPeek(1));
1147 if (Forwardcharnext() != (ushort)Operand(0))
1148 {
1149 int num6 = TrackPeek();
1150 if (num6 > 0)
1151 {
1152 TrackPush(num6 - 1, num5 + Bump());
1153 }
1154 num = 2;
1155 continue;
1156 }
1157 break;
1158 }
1159 case 136:
1160 {
1161 TrackPop(2);
1162 int num2 = (runtextpos = TrackPeek(1));
1163 int num3 = Operand(0);
1164 if (RegexCharClass.CharInClass(Forwardcharnext(), _code.Strings[num3], ref _code.StringsAsciiLookup[num3]))
1165 {
1166 int num4 = TrackPeek();
1167 if (num4 > 0)
1168 {
1169 TrackPush(num4 - 1, num2 + Bump());
1170 }
1171 num = 2;
1172 continue;
1173 }
1174 break;
1175 }
1176 case 46:
1177 {
1178 runtrack[runtrack.Length - 1] = runtextpos;
1179 num = 0;
1180 continue;
1181 }
1182 end_IL_0037:
1183 break;
1184 }
1185 Backtrack();
1186 }
1187 }
void TransferCapture(int capnum, int uncapnum, int start, int end)
bool IsECMABoundary(int index, int startpos, int endpos)
bool IsBoundary(int index, int startpos, int endpos)
void Capture(int capnum, int start, int end)

References System.Text.RegularExpressions.RegexInterpreter._caseInsensitive, System.Text.RegularExpressions.RegexInterpreter._code, System.Text.RegularExpressions.RegexInterpreter._codepos, System.Text.RegularExpressions.RegexInterpreter._operator, System.Text.RegularExpressions.RegexInterpreter._rightToLeft, System.Text.RegularExpressions.RegexInterpreter.Advance(), System.Text.RegularExpressions.RegexInterpreter.Backtrack(), System.Text.RegularExpressions.RegexInterpreter.Backwardnext(), System.Text.RegularExpressions.RegexInterpreter.Bump(), System.Text.RegularExpressions.RegexRunner.Capture(), System.Text.RegularExpressions.RegexCharClass.CharInClass(), System.Text.RegularExpressions.RegexRunner.CheckTimeout(), System.Text.RegularExpressions.RegexCode.Codes, System.Text.RegularExpressions.RegexRunner.Crawlpos(), System.Text.RegularExpressions.RegexInterpreter.Forwardcharnext(), System.Text.RegularExpressions.RegexInterpreter.Forwardchars(), System.Text.RegularExpressions.RegexInterpreter.Goto(), System.Text.RegularExpressions.i, System.Text.RegularExpressions.RegexRunner.IsBoundary(), System.Text.RegularExpressions.RegexRunner.IsECMABoundary(), System.Text.RegularExpressions.RegexRunner.IsMatched(), System.Text.RegularExpressions.RegexInterpreter.Leftchars(), System.Text.RegularExpressions.RegexRunner.MatchIndex(), System.Text.RegularExpressions.RegexRunner.MatchLength(), System.Text.RegularExpressions.RegexInterpreter.MatchRef(), System.Text.RegularExpressions.RegexInterpreter.MatchString(), System.Math.Min(), System.Text.RegularExpressions.RegexInterpreter.Operand(), System.Text.RegularExpressions.RegexInterpreter.Rightchars(), System.Text.RegularExpressions.Regex.roptions, System.Text.RegularExpressions.RegexRunner.runregex, System.Text.RegularExpressions.RegexRunner.runtext, System.Text.RegularExpressions.RegexRunner.runtextbeg, System.Text.RegularExpressions.RegexRunner.runtextend, System.Text.RegularExpressions.RegexRunner.runtextpos, System.Text.RegularExpressions.RegexRunner.runtextstart, System.Text.RegularExpressions.RegexRunner.runtrack, System.Text.RegularExpressions.RegexInterpreter.SetOperator(), System.Text.RegularExpressions.RegexInterpreter.StackPeek(), System.Text.RegularExpressions.RegexInterpreter.StackPop(), System.Text.RegularExpressions.RegexInterpreter.StackPush(), System.Text.RegularExpressions.RegexCode.Strings, System.Text.RegularExpressions.RegexCode.StringsAsciiLookup, System.Text.RegularExpressions.RegexInterpreter.TrackPeek(), System.Text.RegularExpressions.RegexInterpreter.TrackPop(), System.Text.RegularExpressions.RegexInterpreter.Trackpos(), System.Text.RegularExpressions.RegexInterpreter.TrackPush(), System.Text.RegularExpressions.RegexInterpreter.TrackPush2(), System.Text.RegularExpressions.RegexInterpreter.Trackto(), System.Text.RegularExpressions.RegexRunner.TransferCapture(), and System.Text.RegularExpressions.RegexRunner.Uncapture().