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

◆ Parse() [5/7]

static void System.Text.Json.JsonDocument.Parse ( ReadOnlySpan< byte > utf8JsonSpan,
JsonReaderOptions readerOptions,
ref MetadataDb database,
ref StackRowStack stack )
inlinestaticprivate

Definition at line 949 of file JsonDocument.cs.

950 {
951 bool flag = false;
952 int num = 0;
953 int num2 = 0;
954 int num3 = 0;
955 Utf8JsonReader utf8JsonReader = new Utf8JsonReader(utf8JsonSpan, isFinalBlock: true, new JsonReaderState(readerOptions));
956 while (utf8JsonReader.Read())
957 {
958 JsonTokenType tokenType = utf8JsonReader.TokenType;
959 int num4 = (int)utf8JsonReader.TokenStartIndex;
960 switch (tokenType)
961 {
962 case JsonTokenType.StartObject:
963 {
964 if (flag)
965 {
966 num++;
967 }
968 num3++;
969 database.Append(tokenType, num4, -1);
970 StackRow row2 = new StackRow(num2 + 1);
971 stack.Push(row2);
972 num2 = 0;
973 break;
974 }
975 case JsonTokenType.EndObject:
976 {
977 int index = database.FindIndexOfFirstUnsetSizeOrLength(JsonTokenType.StartObject);
978 num3++;
979 num2++;
980 database.SetLength(index, num2);
981 int length2 = database.Length;
982 database.Append(tokenType, num4, utf8JsonReader.ValueSpan.Length);
983 database.SetNumberOfRows(index, num2);
984 database.SetNumberOfRows(length2, num2);
985 num2 += stack.Pop().SizeOrLength;
986 break;
987 }
988 case JsonTokenType.StartArray:
989 {
990 if (flag)
991 {
992 num++;
993 }
994 num2++;
995 database.Append(tokenType, num4, -1);
996 StackRow row = new StackRow(num, num3 + 1);
997 stack.Push(row);
998 num = 0;
999 num3 = 0;
1000 break;
1001 }
1002 case JsonTokenType.EndArray:
1003 {
1004 int num5 = database.FindIndexOfFirstUnsetSizeOrLength(JsonTokenType.StartArray);
1005 num3++;
1006 num2++;
1007 database.SetLength(num5, num);
1008 database.SetNumberOfRows(num5, num3);
1009 if (num + 1 != num3)
1010 {
1011 database.SetHasComplexChildren(num5);
1012 }
1013 int length = database.Length;
1014 database.Append(tokenType, num4, utf8JsonReader.ValueSpan.Length);
1015 database.SetNumberOfRows(length, num3);
1016 StackRow stackRow = stack.Pop();
1017 num = stackRow.SizeOrLength;
1018 num3 += stackRow.NumberOfRows;
1019 break;
1020 }
1021 case JsonTokenType.PropertyName:
1022 num3++;
1023 num2++;
1024 database.Append(tokenType, num4 + 1, utf8JsonReader.ValueSpan.Length);
1025 if (utf8JsonReader._stringHasEscaping)
1026 {
1027 database.SetHasComplexChildren(database.Length - 12);
1028 }
1029 break;
1030 default:
1031 num3++;
1032 num2++;
1033 if (flag)
1034 {
1035 num++;
1036 }
1037 if (tokenType == JsonTokenType.String)
1038 {
1039 database.Append(tokenType, num4 + 1, utf8JsonReader.ValueSpan.Length);
1040 if (utf8JsonReader._stringHasEscaping)
1041 {
1042 database.SetHasComplexChildren(database.Length - 12);
1043 }
1044 }
1045 else
1046 {
1047 database.Append(tokenType, num4, utf8JsonReader.ValueSpan.Length);
1048 }
1049 break;
1050 }
1051 flag = utf8JsonReader.IsInArray;
1052 }
1053 database.CompleteAllocations();
1054 }

References System.Text.Json.Dictionary, System.index, System.Text.Json.JsonDocument.int, System.length, System.length2, and System.Text.Json.Utf8JsonReader.TokenType.

Referenced by System.Text.Json.JsonDocument.Parse(), System.Text.Json.JsonDocument.Parse(), System.Text.Json.JsonDocument.Parse(), System.Text.Json.JsonDocument.Parse(), System.Text.Json.JsonDocument.Parse(), System.Text.Json.JsonDocument.Parse(), System.Text.Json.JsonDocument.ParseAsyncCore(), System.Text.Json.JsonDocument.ParseRented(), System.Text.Json.JsonDocument.ParseUnrented(), and System.Text.Json.JsonDocument.TryParseValue().