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

◆ ReduceConcatenationWithAdjacentLoops()

void System.Text.RegularExpressions.RegexNode.ReduceConcatenationWithAdjacentLoops ( )
inlineprivate

Definition at line 748 of file RegexNode.cs.

749 {
751 int index = 0;
752 int num = 1;
753 int num2 = 1;
754 while (num < list.Count)
755 {
758 if (regexNode.Options == regexNode2.Options)
759 {
760 switch (regexNode.Type)
761 {
762 case 3:
763 if (regexNode2.Type == 3 && regexNode.Ch == regexNode2.Ch)
764 {
765 goto IL_01de;
766 }
767 if (regexNode2.Type != 9 || regexNode.Ch != regexNode2.Ch)
768 {
769 break;
770 }
771 goto IL_03b2;
772 case 43:
773 if (regexNode2.Type == 43 && regexNode.Ch == regexNode2.Ch)
774 {
775 goto IL_01de;
776 }
777 if (regexNode2.Type != 9 || regexNode.Ch != regexNode2.Ch)
778 {
779 break;
780 }
781 goto IL_03b2;
782 case 6:
783 if (regexNode2.Type == 6 && regexNode.Ch == regexNode2.Ch)
784 {
785 goto IL_01de;
786 }
787 if (regexNode2.Type != 9 || regexNode.Ch != regexNode2.Ch)
788 {
789 break;
790 }
791 goto IL_03b2;
792 case 4:
793 if (regexNode2.Type == 4 && regexNode.Ch == regexNode2.Ch)
794 {
795 goto IL_01de;
796 }
797 if (regexNode2.Type != 10 || regexNode.Ch != regexNode2.Ch)
798 {
799 break;
800 }
801 goto IL_03b2;
802 case 44:
803 if (regexNode2.Type == 44 && regexNode.Ch == regexNode2.Ch)
804 {
805 goto IL_01de;
806 }
807 if (regexNode2.Type != 10 || regexNode.Ch != regexNode2.Ch)
808 {
809 break;
810 }
811 goto IL_03b2;
812 case 7:
813 if (regexNode2.Type == 7 && regexNode.Ch == regexNode2.Ch)
814 {
815 goto IL_01de;
816 }
817 if (regexNode2.Type != 10 || regexNode.Ch != regexNode2.Ch)
818 {
819 break;
820 }
821 goto IL_03b2;
822 case 5:
823 if (regexNode2.Type == 5 && regexNode.Str == regexNode2.Str)
824 {
825 goto IL_01de;
826 }
827 if (regexNode2.Type != 11 || !(regexNode.Str == regexNode2.Str))
828 {
829 break;
830 }
831 goto IL_03b2;
832 case 45:
833 if (regexNode2.Type == 45 && regexNode.Str == regexNode2.Str)
834 {
835 goto IL_01de;
836 }
837 if (regexNode2.Type != 11 || !(regexNode.Str == regexNode2.Str))
838 {
839 break;
840 }
841 goto IL_03b2;
842 case 8:
843 if (regexNode2.Type == 8 && regexNode.Str == regexNode2.Str)
844 {
845 goto IL_01de;
846 }
847 if (regexNode2.Type != 11 || !(regexNode.Str == regexNode2.Str))
848 {
849 break;
850 }
851 goto IL_03b2;
852 case 9:
853 if ((regexNode2.Type == 3 || regexNode2.Type == 43 || regexNode2.Type == 6) && regexNode.Ch == regexNode2.Ch)
854 {
855 goto IL_04b1;
856 }
857 if (regexNode2.Type != 9 || regexNode.Ch != regexNode2.Ch)
858 {
859 break;
860 }
861 goto IL_0571;
862 case 10:
863 if ((regexNode2.Type == 4 || regexNode2.Type == 44 || regexNode2.Type == 7) && regexNode.Ch == regexNode2.Ch)
864 {
865 goto IL_04b1;
866 }
867 if (regexNode2.Type != 10 || regexNode.Ch != regexNode2.Ch)
868 {
869 break;
870 }
871 goto IL_0571;
872 case 11:
873 {
874 if ((regexNode2.Type == 5 || regexNode2.Type == 45 || regexNode2.Type == 8) && regexNode.Str == regexNode2.Str)
875 {
876 goto IL_04b1;
877 }
878 if (regexNode2.Type != 11 || !(regexNode.Str == regexNode2.Str))
879 {
880 break;
881 }
882 goto IL_0571;
883 }
884 IL_0571:
885 regexNode.MakeRep(3, 2, 2);
886 num++;
887 continue;
888 IL_04b1:
889 if (CanCombineCounts(1, 1, regexNode2.M, regexNode2.N))
890 {
891 regexNode.Type = regexNode2.Type;
892 regexNode.M = regexNode2.M + 1;
893 regexNode.N = ((regexNode2.N == int.MaxValue) ? int.MaxValue : (regexNode2.N + 1));
894 num++;
895 continue;
896 }
897 break;
898 IL_03b2:
899 if (CanCombineCounts(regexNode.M, regexNode.N, 1, 1))
900 {
901 regexNode.M++;
902 if (regexNode.N != int.MaxValue)
903 {
904 regexNode.N++;
905 }
906 num++;
907 continue;
908 }
909 break;
910 IL_01de:
912 {
913 regexNode.M += regexNode2.M;
914 if (regexNode.N != int.MaxValue)
915 {
916 regexNode.N = ((regexNode2.N == int.MaxValue) ? int.MaxValue : (regexNode.N + regexNode2.N));
917 }
918 num++;
919 continue;
920 }
921 break;
922 }
923 }
924 list[num2++] = list[num];
925 index = num;
926 num++;
927 }
928 if (num2 < list.Count)
929 {
930 list.RemoveRange(num2, list.Count - num2);
931 }
932 static bool CanCombineCounts(int nodeMin, int nodeMax, int nextMin, int nextMax)
933 {
934 if (nodeMin == int.MaxValue || nextMin == int.MaxValue || (uint)(nodeMin + nextMin) >= 2147483647u)
935 {
936 return false;
937 }
938 if (nodeMax != int.MaxValue && nextMax != int.MaxValue && (uint)(nodeMax + nextMax) >= 2147483647u)
939 {
940 return false;
941 }
942 return true;
943 }
944 }
RegexNode(int type, RegexOptions options)
Definition RegexNode.cs:23

References System.Text.RegularExpressions.RegexNode.Children, System.Collections.Generic.Dictionary< TKey, TValue >.Count, System.index, and System.list.

Referenced by System.Text.RegularExpressions.RegexNode.ReduceConcatenation().