Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
MetadataBuilder.cs
Go to the documentation of this file.
4
6
7public sealed class MetadataBuilder
8{
9 private struct AssemblyRefTableRow
10 {
12
14
16
18
19 public uint Flags;
20
22 }
23
24 private struct ModuleRow
25 {
26 public ushort Generation;
27
29
31
33
35 }
36
37 private struct AssemblyRow
38 {
39 public uint HashAlgorithm;
40
42
43 public ushort Flags;
44
46
48
50 }
51
52 private struct ClassLayoutRow
53 {
54 public ushort PackingSize;
55
56 public uint ClassSize;
57
58 public int Parent;
59 }
60
61 private struct ConstantRow
62 {
63 public byte Type;
64
65 public int Parent;
66
68 }
69
70 private struct CustomAttributeRow
71 {
72 public int Parent;
73
74 public int Type;
75
77 }
78
79 private struct DeclSecurityRow
80 {
81 public ushort Action;
82
83 public int Parent;
84
86 }
87
88 private struct EncLogRow
89 {
90 public int Token;
91
92 public byte FuncCode;
93 }
94
95 private struct EncMapRow
96 {
97 public int Token;
98 }
99
100 private struct EventRow
101 {
102 public ushort EventFlags;
103
105
106 public int EventType;
107 }
108
109 private struct EventMapRow
110 {
111 public int Parent;
112
113 public int EventList;
114 }
115
116 private struct ExportedTypeRow
117 {
118 public uint Flags;
119
120 public int TypeDefId;
121
123
125
126 public int Implementation;
127 }
128
129 private struct FieldLayoutRow
130 {
131 public int Offset;
132
133 public int Field;
134 }
135
136 private struct FieldMarshalRow
137 {
138 public int Parent;
139
141 }
142
143 private struct FieldRvaRow
144 {
145 public int Offset;
146
147 public int Field;
148 }
149
150 private struct FieldDefRow
151 {
152 public ushort Flags;
153
155
157 }
158
159 private struct FileTableRow
160 {
161 public uint Flags;
162
164
166 }
167
169 {
170 public int Owner;
171
172 public int Constraint;
173 }
174
175 private struct GenericParamRow
176 {
177 public ushort Number;
178
179 public ushort Flags;
180
181 public int Owner;
182
184 }
185
186 private struct ImplMapRow
187 {
188 public ushort MappingFlags;
189
190 public int MemberForwarded;
191
193
194 public int ImportScope;
195 }
196
197 private struct InterfaceImplRow
198 {
199 public int Class;
200
201 public int Interface;
202 }
203
204 private struct ManifestResourceRow
205 {
206 public uint Offset;
207
208 public uint Flags;
209
211
212 public int Implementation;
213 }
214
215 private struct MemberRefRow
216 {
217 public int Class;
218
220
222 }
223
224 private struct MethodImplRow
225 {
226 public int Class;
227
228 public int MethodBody;
229
230 public int MethodDecl;
231 }
232
233 private struct MethodSemanticsRow
234 {
235 public ushort Semantic;
236
237 public int Method;
238
239 public int Association;
240 }
241
242 private struct MethodSpecRow
243 {
244 public int Method;
245
247 }
248
249 private struct MethodRow
250 {
251 public int BodyOffset;
252
253 public ushort ImplFlags;
254
255 public ushort Flags;
256
258
260
261 public int ParamList;
262 }
263
264 private struct ModuleRefRow
265 {
267 }
268
269 private struct NestedClassRow
270 {
271 public int NestedClass;
272
273 public int EnclosingClass;
274 }
275
276 private struct ParamRow
277 {
278 public ushort Flags;
279
280 public ushort Sequence;
281
283 }
284
285 private struct PropertyMapRow
286 {
287 public int Parent;
288
289 public int PropertyList;
290 }
291
292 private struct PropertyRow
293 {
294 public ushort PropFlags;
295
297
299 }
300
301 private struct TypeDefRow
302 {
303 public uint Flags;
304
306
308
309 public int Extends;
310
311 public int FieldList;
312
313 public int MethodList;
314 }
315
316 private struct TypeRefRow
317 {
318 public int ResolutionScope;
319
321
323 }
324
325 private struct TypeSpecRow
326 {
328 }
329
330 private struct StandaloneSigRow
331 {
333 }
334
335 private struct DocumentRow
336 {
338
340
342
344 }
345
347 {
348 public int Document;
349
351 }
352
353 private struct LocalScopeRow
354 {
355 public int Method;
356
357 public int ImportScope;
358
359 public int VariableList;
360
361 public int ConstantList;
362
363 public int StartOffset;
364
365 public int Length;
366 }
367
368 private struct LocalVariableRow
369 {
370 public ushort Attributes;
371
372 public ushort Index;
373
375 }
376
377 private struct LocalConstantRow
378 {
380
382 }
383
384 private struct ImportScopeRow
385 {
386 public int Parent;
387
389 }
390
392 {
393 public int MoveNextMethod;
394
395 public int KickoffMethod;
396 }
397
399 {
400 public int Parent;
401
403
405 }
406
407 private sealed class HeapBlobBuilder : BlobBuilder
408 {
410
412 : base(capacity)
413 {
414 }
415
416 protected override BlobBuilder AllocateChunk(int minimalSize)
417 {
418 return new HeapBlobBuilder(Math.Max(Math.Max(minimalSize, base.ChunkCapacity), _capacityExpansion));
419 }
420
421 internal void SetCapacity(int capacity)
422 {
423 _capacityExpansion = Math.Max(0, capacity - base.Count - base.FreeBytes);
424 }
425 }
426
427 private sealed class SuffixSort : IComparer<KeyValuePair<string, StringHandle>>
428 {
429 internal static SuffixSort Instance = new SuffixSort();
430
432 {
433 string key = xPair.Key;
434 string key2 = yPair.Key;
435 int num = key.Length - 1;
436 int num2 = key2.Length - 1;
437 while (num >= 0 && num2 >= 0)
438 {
439 if (key[num] < key2[num2])
440 {
441 return -1;
442 }
443 if (key[num] > key2[num2])
444 {
445 return 1;
446 }
447 num--;
448 num2--;
449 }
450 return key2.Length.CompareTo(key.Length);
451 }
452 }
453
455
457
459
461
463
465
467
469
471
473
475
477
479
481
482 private readonly List<EventRow> _eventTable = new List<EventRow>();
483
485
487
489
491
493
495
497
499
501
503
505
507
509
511
513
515
517
519
521
523
525
527
529
530 private readonly List<ParamRow> _paramTable = new List<ParamRow>();
531
533
535
537
539
541
543
545
547
549
551
553
555
557
559
561
563
565
566 private readonly int _userStringHeapStartOffset;
567
569
570 private readonly int _stringHeapStartOffset;
571
572 private int _stringHeapCapacity = 4096;
573
575
576 private readonly int _blobHeapStartOffset;
577
578 private int _blobHeapSize;
579
581
582 private readonly HeapBlobBuilder _guidBuilder = new HeapBlobBuilder(16);
583
592
594 {
595 int count = builder.Count;
596 builder.WriteUInt32(1112167234u);
597 builder.WriteUInt16(1);
598 builder.WriteUInt16(1);
599 builder.WriteUInt32(0u);
600 builder.WriteInt32(sizes.MetadataVersionPaddedLength);
601 int count2 = builder.Count;
602 builder.WriteUTF8(metadataVersion);
603 builder.WriteByte(0);
604 int count3 = builder.Count;
605 for (int i = 0; i < sizes.MetadataVersionPaddedLength - (count3 - count2); i++)
606 {
607 builder.WriteByte(0);
608 }
609 builder.WriteUInt16(0);
610 builder.WriteUInt16((ushort)(5 + (sizes.IsEncDelta ? 1 : 0) + (sizes.IsStandaloneDebugMetadata ? 1 : 0)));
611 int offsetFromStartOfMetadata = sizes.MetadataHeaderSize;
612 if (sizes.IsStandaloneDebugMetadata)
613 {
614 SerializeStreamHeader(ref offsetFromStartOfMetadata, sizes.StandalonePdbStreamSize, "#Pdb", builder);
615 }
616 SerializeStreamHeader(ref offsetFromStartOfMetadata, sizes.MetadataTableStreamSize, sizes.IsCompressed ? "#~" : "#-", builder);
617 SerializeStreamHeader(ref offsetFromStartOfMetadata, sizes.GetAlignedHeapSize(HeapIndex.String), "#Strings", builder);
618 SerializeStreamHeader(ref offsetFromStartOfMetadata, sizes.GetAlignedHeapSize(HeapIndex.UserString), "#US", builder);
619 SerializeStreamHeader(ref offsetFromStartOfMetadata, sizes.GetAlignedHeapSize(HeapIndex.Guid), "#GUID", builder);
620 SerializeStreamHeader(ref offsetFromStartOfMetadata, sizes.GetAlignedHeapSize(HeapIndex.Blob), "#Blob", builder);
621 if (sizes.IsEncDelta)
622 {
624 }
625 int count4 = builder.Count;
626 }
627
629 {
632 builder.WriteInt32(alignedStreamSize);
633 foreach (char c in streamName)
634 {
635 builder.WriteByte((byte)c);
636 }
637 for (uint num = (uint)(8 + streamName.Length); num < metadataStreamHeaderSize; num++)
638 {
639 builder.WriteByte(0);
640 }
642 }
643
644 public void SetCapacity(TableIndex table, int rowCount)
645 {
646 if (rowCount < 0)
647 {
648 Throw.ArgumentOutOfRange("rowCount");
649 }
650 switch (table)
651 {
652 case TableIndex.TypeRef:
654 break;
655 case TableIndex.TypeDef:
657 break;
658 case TableIndex.Field:
660 break;
661 case TableIndex.MethodDef:
663 break;
664 case TableIndex.Param:
666 break;
667 case TableIndex.InterfaceImpl:
669 break;
670 case TableIndex.MemberRef:
672 break;
673 case TableIndex.Constant:
675 break;
676 case TableIndex.CustomAttribute:
678 break;
679 case TableIndex.FieldMarshal:
681 break;
682 case TableIndex.DeclSecurity:
684 break;
685 case TableIndex.ClassLayout:
687 break;
688 case TableIndex.FieldLayout:
690 break;
691 case TableIndex.StandAloneSig:
693 break;
694 case TableIndex.EventMap:
696 break;
697 case TableIndex.Event:
699 break;
700 case TableIndex.PropertyMap:
702 break;
703 case TableIndex.Property:
705 break;
706 case TableIndex.MethodSemantics:
708 break;
709 case TableIndex.MethodImpl:
711 break;
712 case TableIndex.ModuleRef:
714 break;
715 case TableIndex.TypeSpec:
717 break;
718 case TableIndex.ImplMap:
720 break;
721 case TableIndex.FieldRva:
723 break;
724 case TableIndex.EncLog:
726 break;
727 case TableIndex.EncMap:
729 break;
730 case TableIndex.AssemblyRef:
732 break;
733 case TableIndex.File:
735 break;
736 case TableIndex.ExportedType:
738 break;
739 case TableIndex.ManifestResource:
741 break;
742 case TableIndex.NestedClass:
744 break;
745 case TableIndex.GenericParam:
747 break;
748 case TableIndex.MethodSpec:
750 break;
751 case TableIndex.GenericParamConstraint:
753 break;
754 case TableIndex.Document:
756 break;
757 case TableIndex.MethodDebugInformation:
759 break;
760 case TableIndex.LocalScope:
762 break;
763 case TableIndex.LocalVariable:
765 break;
766 case TableIndex.LocalConstant:
768 break;
769 case TableIndex.ImportScope:
771 break;
772 case TableIndex.StateMachineMethod:
774 break;
775 case TableIndex.CustomDebugInformation:
777 break;
778 default:
779 throw new ArgumentOutOfRangeException("table");
780 case TableIndex.Module:
781 case TableIndex.FieldPtr:
782 case TableIndex.MethodPtr:
783 case TableIndex.ParamPtr:
784 case TableIndex.EventPtr:
785 case TableIndex.PropertyPtr:
786 case TableIndex.Assembly:
787 case TableIndex.AssemblyProcessor:
788 case TableIndex.AssemblyOS:
789 case TableIndex.AssemblyRefProcessor:
790 case TableIndex.AssemblyRefOS:
791 break;
792 }
793 }
794
795 private static void SetTableCapacity<T>(List<T> table, int rowCount)
796 {
797 if (rowCount > table.Count)
798 {
799 table.Capacity = rowCount;
800 }
801 }
802
803 public int GetRowCount(TableIndex table)
804 {
805 switch (table)
806 {
807 case TableIndex.Assembly:
808 if (!_assemblyRow.HasValue)
809 {
810 return 0;
811 }
812 return 1;
813 case TableIndex.AssemblyRef:
815 case TableIndex.ClassLayout:
817 case TableIndex.Constant:
818 return _constantTable.Count;
819 case TableIndex.CustomAttribute:
821 case TableIndex.DeclSecurity:
823 case TableIndex.EncLog:
824 return _encLogTable.Count;
825 case TableIndex.EncMap:
826 return _encMapTable.Count;
827 case TableIndex.EventMap:
828 return _eventMapTable.Count;
829 case TableIndex.Event:
830 return _eventTable.Count;
831 case TableIndex.ExportedType:
833 case TableIndex.FieldLayout:
835 case TableIndex.FieldMarshal:
837 case TableIndex.FieldRva:
838 return _fieldRvaTable.Count;
839 case TableIndex.Field:
840 return _fieldTable.Count;
841 case TableIndex.File:
842 return _fileTable.Count;
843 case TableIndex.GenericParamConstraint:
845 case TableIndex.GenericParam:
847 case TableIndex.ImplMap:
848 return _implMapTable.Count;
849 case TableIndex.InterfaceImpl:
851 case TableIndex.ManifestResource:
853 case TableIndex.MemberRef:
854 return _memberRefTable.Count;
855 case TableIndex.MethodImpl:
856 return _methodImplTable.Count;
857 case TableIndex.MethodSemantics:
859 case TableIndex.MethodSpec:
860 return _methodSpecTable.Count;
861 case TableIndex.MethodDef:
862 return _methodDefTable.Count;
863 case TableIndex.ModuleRef:
864 return _moduleRefTable.Count;
865 case TableIndex.Module:
866 if (!_moduleRow.HasValue)
867 {
868 return 0;
869 }
870 return 1;
871 case TableIndex.NestedClass:
873 case TableIndex.Param:
874 return _paramTable.Count;
875 case TableIndex.PropertyMap:
877 case TableIndex.Property:
878 return _propertyTable.Count;
879 case TableIndex.StandAloneSig:
881 case TableIndex.TypeDef:
882 return _typeDefTable.Count;
883 case TableIndex.TypeRef:
884 return _typeRefTable.Count;
885 case TableIndex.TypeSpec:
886 return _typeSpecTable.Count;
887 case TableIndex.Document:
888 return _documentTable.Count;
889 case TableIndex.MethodDebugInformation:
891 case TableIndex.LocalScope:
892 return _localScopeTable.Count;
893 case TableIndex.LocalVariable:
895 case TableIndex.LocalConstant:
897 case TableIndex.StateMachineMethod:
899 case TableIndex.ImportScope:
901 case TableIndex.CustomDebugInformation:
903 case TableIndex.FieldPtr:
904 case TableIndex.MethodPtr:
905 case TableIndex.ParamPtr:
906 case TableIndex.EventPtr:
907 case TableIndex.PropertyPtr:
908 case TableIndex.AssemblyProcessor:
909 case TableIndex.AssemblyOS:
910 case TableIndex.AssemblyRefProcessor:
911 case TableIndex.AssemblyRefOS:
912 return 0;
913 default:
914 throw new ArgumentOutOfRangeException("table");
915 }
916 }
917
919 {
921 builder.Count = MetadataTokens.TableCount;
922 builder[32] = (_assemblyRow.HasValue ? 1 : 0);
949 builder[0] = (_moduleRow.HasValue ? 1 : 0);
966 return builder.MoveToImmutable();
967 }
968
970 {
971 if ((uint)generation > 65535u)
972 {
973 Throw.ArgumentOutOfRange("generation");
974 }
975 if (_moduleRow.HasValue)
976 {
978 }
980 {
981 Generation = (ushort)generation,
983 ModuleVersionId = mvid,
984 EncId = encId,
985 EncBaseId = encBaseId
986 };
988 }
989
991 {
992 if (version == null)
993 {
994 Throw.ArgumentNull("version");
995 }
996 if (_assemblyRow.HasValue)
997 {
999 }
1001 {
1002 Flags = (ushort)flags,
1003 HashAlgorithm = (uint)hashAlgorithm,
1004 Version = version,
1005 AssemblyKey = publicKey,
1006 AssemblyName = name,
1007 AssemblyCulture = culture
1008 };
1010 }
1011
1013 {
1014 if (version == null)
1015 {
1016 Throw.ArgumentNull("version");
1017 }
1019 {
1020 Name = name,
1021 Version = version,
1022 Culture = culture,
1023 PublicKeyToken = publicKeyOrToken,
1024 Flags = (uint)flags,
1025 HashValue = hashValue
1026 });
1028 }
1029
1031 {
1033 {
1034 Flags = (uint)attributes,
1035 Name = name,
1036 Namespace = @namespace,
1037 Extends = ((!baseType.IsNil) ? CodedIndex.TypeDefOrRefOrSpec(baseType) : 0),
1038 FieldList = fieldList.RowId,
1039 MethodList = methodList.RowId
1040 });
1042 }
1043
1044 public void AddTypeLayout(TypeDefinitionHandle type, ushort packingSize, uint size)
1045 {
1047 {
1048 Parent = type.RowId,
1049 PackingSize = packingSize,
1050 ClassSize = size
1051 });
1052 }
1053
1063
1065 {
1067 {
1068 NestedClass = type.RowId,
1069 EnclosingClass = enclosingType.RowId
1070 });
1071 }
1072
1074 {
1076 {
1077 ResolutionScope = ((!resolutionScope.IsNil) ? CodedIndex.ResolutionScope(resolutionScope) : 0),
1078 Name = name,
1079 Namespace = @namespace
1080 });
1082 }
1083
1092
1101
1103 {
1105 {
1106 PropFlags = (ushort)attributes,
1107 Name = name,
1108 Type = signature
1109 });
1111 }
1112
1114 {
1116 {
1117 Parent = declaringType.RowId,
1118 PropertyList = propertyList.RowId
1119 });
1120 }
1121
1123 {
1125 {
1126 EventFlags = (ushort)attributes,
1127 Name = name,
1129 });
1131 }
1132
1134 {
1136 {
1137 Parent = declaringType.RowId,
1138 EventList = eventList.RowId
1139 });
1140 }
1141
1143 {
1144 int num = CodedIndex.HasConstant(parent);
1148 {
1150 Parent = num,
1152 });
1154 }
1155
1168
1182
1192
1201
1203 {
1204 if ((uint)sequenceNumber > 65535u)
1205 {
1206 Throw.ArgumentOutOfRange("sequenceNumber");
1207 }
1209 {
1210 Flags = (ushort)attributes,
1211 Name = name,
1212 Sequence = (ushort)sequenceNumber
1213 });
1215 }
1216
1218 {
1219 if ((uint)index > 65535u)
1220 {
1221 Throw.ArgumentOutOfRange("index");
1222 }
1224 {
1225 Flags = (ushort)attributes,
1226 Name = name,
1227 Number = (ushort)index,
1228 Owner = CodedIndex.TypeOrMethodDef(parent)
1229 });
1231 }
1232
1242
1244 {
1246 {
1247 Flags = (ushort)attributes,
1248 Name = name,
1250 });
1252 }
1253
1255 {
1257 {
1258 Field = field.RowId,
1259 Offset = offset
1260 });
1261 }
1262
1263 public void AddMarshallingDescriptor(EntityHandle parent, BlobHandle descriptor)
1264 {
1265 int num = CodedIndex.HasFieldMarshal(parent);
1269 {
1270 Parent = num,
1271 NativeType = descriptor
1272 });
1273 }
1274
1276 {
1277 if (offset < 0)
1278 {
1279 Throw.ArgumentOutOfRange("offset");
1280 }
1282 {
1283 Field = field.RowId,
1284 Offset = offset
1285 });
1286 }
1287
1289 {
1290 if (bodyOffset < -1)
1291 {
1292 Throw.ArgumentOutOfRange("bodyOffset");
1293 }
1295 {
1296 Flags = (ushort)attributes,
1297 ImplFlags = (ushort)implAttributes,
1298 Name = name,
1300 BodyOffset = bodyOffset,
1301 ParamList = parameterList.RowId
1302 });
1304 }
1305
1307 {
1309 {
1310 MemberForwarded = CodedIndex.MemberForwarded(method),
1311 ImportName = name,
1312 ImportScope = module.RowId,
1313 MappingFlags = (ushort)attributes
1314 });
1315 }
1316
1327
1338
1350
1352 {
1354 {
1355 FileName = name,
1356 Flags = ((!containsMetadata) ? 1u : 0u),
1357 HashValue = hashValue
1358 });
1360 }
1361
1363 {
1365 {
1366 Flags = (uint)attributes,
1368 TypeNamespace = @namespace,
1369 TypeName = name,
1370 TypeDefId = typeDefinitionId
1371 });
1373 }
1374
1388
1390 {
1392 {
1393 Token = entity.Token,
1394 FuncCode = (byte)code
1395 });
1396 }
1397
1398 public void AddEncMapEntry(EntityHandle entity)
1399 {
1401 {
1402 Token = entity.Token
1403 });
1404 }
1405
1407 {
1409 {
1410 Name = name,
1411 HashAlgorithm = hashAlgorithm,
1412 Hash = hash,
1413 Language = language
1414 });
1416 }
1417
1427
1429 {
1431 {
1432 Method = method.RowId,
1433 ImportScope = importScope.RowId,
1434 VariableList = variableList.RowId,
1435 ConstantList = constantList.RowId,
1436 StartOffset = startOffset,
1437 Length = length
1438 });
1440 }
1441
1443 {
1444 if ((uint)index > 65535u)
1445 {
1446 Throw.ArgumentOutOfRange("index");
1447 }
1449 {
1450 Attributes = (ushort)attributes,
1451 Index = (ushort)index,
1452 Name = name
1453 });
1455 }
1456
1466
1476
1478 {
1480 {
1481 MoveNextMethod = moveNextMethod.RowId,
1482 KickoffMethod = kickoffMethod.RowId
1483 });
1484 }
1485
1496
1511
1513 {
1514 for (int i = 1; i < _classLayoutTable.Count; i++)
1515 {
1516 if (_classLayoutTable[i - 1].Parent >= _classLayoutTable[i].Parent)
1517 {
1519 }
1520 }
1521 }
1522
1524 {
1525 for (int i = 1; i < _fieldLayoutTable.Count; i++)
1526 {
1528 {
1530 }
1531 }
1532 }
1533
1535 {
1536 for (int i = 1; i < _fieldRvaTable.Count; i++)
1537 {
1538 if (_fieldRvaTable[i - 1].Field >= _fieldRvaTable[i].Field)
1539 {
1541 }
1542 }
1543 }
1544
1546 {
1547 if (_genericParamTable.Count == 0)
1548 {
1549 return;
1550 }
1552 int num = 1;
1553 while (num < _genericParamTable.Count)
1554 {
1556 if (genericParamRow2.Owner <= genericParamRow.Owner && (genericParamRow.Owner != genericParamRow2.Owner || genericParamRow2.Number <= genericParamRow.Number))
1557 {
1559 }
1560 num++;
1562 }
1563 }
1564
1566 {
1567 for (int i = 1; i < _genericParamConstraintTable.Count; i++)
1568 {
1570 {
1571 Throw.InvalidOperation_TableNotSorted(TableIndex.GenericParamConstraint);
1572 }
1573 }
1574 }
1575
1577 {
1578 for (int i = 1; i < _implMapTable.Count; i++)
1579 {
1580 if (_implMapTable[i - 1].MemberForwarded >= _implMapTable[i].MemberForwarded)
1581 {
1583 }
1584 }
1585 }
1586
1588 {
1589 if (_interfaceImplTable.Count == 0)
1590 {
1591 return;
1592 }
1594 int num = 1;
1595 while (num < _interfaceImplTable.Count)
1596 {
1598 if (interfaceImplRow2.Class <= interfaceImplRow.Class && (interfaceImplRow.Class != interfaceImplRow2.Class || interfaceImplRow2.Interface <= interfaceImplRow.Interface))
1599 {
1601 }
1602 num++;
1604 }
1605 }
1606
1608 {
1609 for (int i = 1; i < _methodImplTable.Count; i++)
1610 {
1612 {
1614 }
1615 }
1616 }
1617
1619 {
1620 for (int i = 1; i < _nestedClassTable.Count; i++)
1621 {
1623 {
1625 }
1626 }
1627 }
1628
1630 {
1631 if (_localScopeTable.Count == 0)
1632 {
1633 return;
1634 }
1636 int num = 1;
1637 while (num < _localScopeTable.Count)
1638 {
1640 if (localScopeRow2.Method <= localScopeRow.Method && (localScopeRow2.Method != localScopeRow.Method || (localScopeRow2.StartOffset <= localScopeRow.StartOffset && (localScopeRow2.StartOffset != localScopeRow.StartOffset || localScopeRow.Length < localScopeRow2.Length))))
1641 {
1643 }
1644 num++;
1646 }
1647 }
1648
1650 {
1651 for (int i = 1; i < _stateMachineMethodTable.Count; i++)
1652 {
1653 if (_stateMachineMethodTable[i - 1].MoveNextMethod >= _stateMachineMethodTable[i].MoveNextMethod)
1654 {
1656 }
1657 }
1658 }
1659
1661 {
1662 int count = writer.Count;
1664 if (metadataSizes.IsPresent(TableIndex.Module))
1665 {
1667 }
1668 if (metadataSizes.IsPresent(TableIndex.TypeRef))
1669 {
1671 }
1672 if (metadataSizes.IsPresent(TableIndex.TypeDef))
1673 {
1675 }
1676 if (metadataSizes.IsPresent(TableIndex.Field))
1677 {
1679 }
1680 if (metadataSizes.IsPresent(TableIndex.MethodDef))
1681 {
1683 }
1684 if (metadataSizes.IsPresent(TableIndex.Param))
1685 {
1687 }
1688 if (metadataSizes.IsPresent(TableIndex.InterfaceImpl))
1689 {
1691 }
1692 if (metadataSizes.IsPresent(TableIndex.MemberRef))
1693 {
1695 }
1696 if (metadataSizes.IsPresent(TableIndex.Constant))
1697 {
1699 }
1700 if (metadataSizes.IsPresent(TableIndex.CustomAttribute))
1701 {
1703 }
1704 if (metadataSizes.IsPresent(TableIndex.FieldMarshal))
1705 {
1707 }
1708 if (metadataSizes.IsPresent(TableIndex.DeclSecurity))
1709 {
1711 }
1712 if (metadataSizes.IsPresent(TableIndex.ClassLayout))
1713 {
1715 }
1716 if (metadataSizes.IsPresent(TableIndex.FieldLayout))
1717 {
1719 }
1720 if (metadataSizes.IsPresent(TableIndex.StandAloneSig))
1721 {
1723 }
1724 if (metadataSizes.IsPresent(TableIndex.EventMap))
1725 {
1727 }
1728 if (metadataSizes.IsPresent(TableIndex.Event))
1729 {
1731 }
1732 if (metadataSizes.IsPresent(TableIndex.PropertyMap))
1733 {
1735 }
1736 if (metadataSizes.IsPresent(TableIndex.Property))
1737 {
1739 }
1740 if (metadataSizes.IsPresent(TableIndex.MethodSemantics))
1741 {
1743 }
1744 if (metadataSizes.IsPresent(TableIndex.MethodImpl))
1745 {
1747 }
1748 if (metadataSizes.IsPresent(TableIndex.ModuleRef))
1749 {
1751 }
1752 if (metadataSizes.IsPresent(TableIndex.TypeSpec))
1753 {
1755 }
1756 if (metadataSizes.IsPresent(TableIndex.ImplMap))
1757 {
1759 }
1760 if (metadataSizes.IsPresent(TableIndex.FieldRva))
1761 {
1763 }
1764 if (metadataSizes.IsPresent(TableIndex.EncLog))
1765 {
1767 }
1768 if (metadataSizes.IsPresent(TableIndex.EncMap))
1769 {
1771 }
1772 if (metadataSizes.IsPresent(TableIndex.Assembly))
1773 {
1775 }
1776 if (metadataSizes.IsPresent(TableIndex.AssemblyRef))
1777 {
1779 }
1780 if (metadataSizes.IsPresent(TableIndex.File))
1781 {
1783 }
1784 if (metadataSizes.IsPresent(TableIndex.ExportedType))
1785 {
1787 }
1788 if (metadataSizes.IsPresent(TableIndex.ManifestResource))
1789 {
1791 }
1792 if (metadataSizes.IsPresent(TableIndex.NestedClass))
1793 {
1795 }
1796 if (metadataSizes.IsPresent(TableIndex.GenericParam))
1797 {
1799 }
1800 if (metadataSizes.IsPresent(TableIndex.MethodSpec))
1801 {
1803 }
1804 if (metadataSizes.IsPresent(TableIndex.GenericParamConstraint))
1805 {
1807 }
1808 if (metadataSizes.IsPresent(TableIndex.Document))
1809 {
1811 }
1812 if (metadataSizes.IsPresent(TableIndex.MethodDebugInformation))
1813 {
1815 }
1816 if (metadataSizes.IsPresent(TableIndex.LocalScope))
1817 {
1819 }
1820 if (metadataSizes.IsPresent(TableIndex.LocalVariable))
1821 {
1823 }
1824 if (metadataSizes.IsPresent(TableIndex.LocalConstant))
1825 {
1827 }
1828 if (metadataSizes.IsPresent(TableIndex.ImportScope))
1829 {
1831 }
1832 if (metadataSizes.IsPresent(TableIndex.StateMachineMethod))
1833 {
1835 }
1836 if (metadataSizes.IsPresent(TableIndex.CustomDebugInformation))
1837 {
1839 }
1840 writer.WriteByte(0);
1841 writer.Align(4);
1842 int count2 = writer.Count;
1843 }
1844
1846 {
1847 int count = writer.Count;
1849 if (!metadataSizes.StringReferenceIsSmall)
1850 {
1851 heapSizeFlag |= HeapSizeFlag.StringHeapLarge;
1852 }
1853 if (!metadataSizes.GuidReferenceIsSmall)
1854 {
1855 heapSizeFlag |= HeapSizeFlag.GuidHeapLarge;
1856 }
1857 if (!metadataSizes.BlobReferenceIsSmall)
1858 {
1859 heapSizeFlag |= HeapSizeFlag.BlobHeapLarge;
1860 }
1861 if (metadataSizes.IsEncDelta)
1862 {
1863 heapSizeFlag |= (HeapSizeFlag)160;
1864 }
1865 ulong num = metadataSizes.PresentTablesMask & 0xC4000000000000uL;
1866 ulong value = num | (metadataSizes.IsStandaloneDebugMetadata ? 0 : 24190111578624uL);
1867 writer.WriteUInt32(0u);
1868 writer.WriteByte(2);
1869 writer.WriteByte(0);
1870 writer.WriteByte((byte)heapSizeFlag);
1871 writer.WriteByte(1);
1872 writer.WriteUInt64(metadataSizes.PresentTablesMask);
1873 writer.WriteUInt64(value);
1875 int count2 = writer.Count;
1876 }
1877
1879 {
1880 if (_moduleRow.HasValue)
1881 {
1882 writer.WriteUInt16(_moduleRow.Value.Generation);
1883 writer.WriteReference(SerializeHandle(stringMap, _moduleRow.Value.Name), metadataSizes.StringReferenceIsSmall);
1884 writer.WriteReference(SerializeHandle(_moduleRow.Value.ModuleVersionId), metadataSizes.GuidReferenceIsSmall);
1885 writer.WriteReference(SerializeHandle(_moduleRow.Value.EncId), metadataSizes.GuidReferenceIsSmall);
1886 writer.WriteReference(SerializeHandle(_moduleRow.Value.EncBaseId), metadataSizes.GuidReferenceIsSmall);
1887 }
1888 }
1889
1891 {
1892 foreach (EncLogRow item in _encLogTable)
1893 {
1894 writer.WriteInt32(item.Token);
1895 writer.WriteUInt32(item.FuncCode);
1896 }
1897 }
1898
1900 {
1901 foreach (EncMapRow item in _encMapTable)
1902 {
1903 writer.WriteInt32(item.Token);
1904 }
1905 }
1906
1908 {
1909 foreach (TypeRefRow item in _typeRefTable)
1910 {
1911 writer.WriteReference(item.ResolutionScope, metadataSizes.ResolutionScopeCodedIndexIsSmall);
1912 writer.WriteReference(SerializeHandle(stringMap, item.Name), metadataSizes.StringReferenceIsSmall);
1913 writer.WriteReference(SerializeHandle(stringMap, item.Namespace), metadataSizes.StringReferenceIsSmall);
1914 }
1915 }
1916
1918 {
1919 foreach (TypeDefRow item in _typeDefTable)
1920 {
1921 writer.WriteUInt32(item.Flags);
1922 writer.WriteReference(SerializeHandle(stringMap, item.Name), metadataSizes.StringReferenceIsSmall);
1923 writer.WriteReference(SerializeHandle(stringMap, item.Namespace), metadataSizes.StringReferenceIsSmall);
1924 writer.WriteReference(item.Extends, metadataSizes.TypeDefOrRefCodedIndexIsSmall);
1925 writer.WriteReference(item.FieldList, metadataSizes.FieldDefReferenceIsSmall);
1926 writer.WriteReference(item.MethodList, metadataSizes.MethodDefReferenceIsSmall);
1927 }
1928 }
1929
1931 {
1932 foreach (FieldDefRow item in _fieldTable)
1933 {
1934 writer.WriteUInt16(item.Flags);
1935 writer.WriteReference(SerializeHandle(stringMap, item.Name), metadataSizes.StringReferenceIsSmall);
1936 writer.WriteReference(SerializeHandle(item.Signature), metadataSizes.BlobReferenceIsSmall);
1937 }
1938 }
1939
1941 {
1942 foreach (MethodRow item in _methodDefTable)
1943 {
1944 if (item.BodyOffset == -1)
1945 {
1946 writer.WriteUInt32(0u);
1947 }
1948 else
1949 {
1950 writer.WriteInt32(methodBodyStreamRva + item.BodyOffset);
1951 }
1952 writer.WriteUInt16(item.ImplFlags);
1953 writer.WriteUInt16(item.Flags);
1954 writer.WriteReference(SerializeHandle(stringMap, item.Name), metadataSizes.StringReferenceIsSmall);
1955 writer.WriteReference(SerializeHandle(item.Signature), metadataSizes.BlobReferenceIsSmall);
1956 writer.WriteReference(item.ParamList, metadataSizes.ParameterReferenceIsSmall);
1957 }
1958 }
1959
1961 {
1962 foreach (ParamRow item in _paramTable)
1963 {
1964 writer.WriteUInt16(item.Flags);
1965 writer.WriteUInt16(item.Sequence);
1966 writer.WriteReference(SerializeHandle(stringMap, item.Name), metadataSizes.StringReferenceIsSmall);
1967 }
1968 }
1969
1971 {
1973 {
1974 writer.WriteReference(item.Class, metadataSizes.TypeDefReferenceIsSmall);
1975 writer.WriteReference(item.Interface, metadataSizes.TypeDefOrRefCodedIndexIsSmall);
1976 }
1977 }
1978
1980 {
1981 foreach (MemberRefRow item in _memberRefTable)
1982 {
1983 writer.WriteReference(item.Class, metadataSizes.MemberRefParentCodedIndexIsSmall);
1984 writer.WriteReference(SerializeHandle(stringMap, item.Name), metadataSizes.StringReferenceIsSmall);
1985 writer.WriteReference(SerializeHandle(item.Signature), metadataSizes.BlobReferenceIsSmall);
1986 }
1987 }
1988
1990 {
1991 IEnumerable<ConstantRow> enumerable;
1993 {
1995 enumerable = constantTable;
1996 }
1997 else
1998 {
1999 enumerable = _constantTable.OrderBy((ConstantRow x, ConstantRow y) => x.Parent - y.Parent);
2000 }
2002 foreach (ConstantRow item in enumerable2)
2003 {
2004 writer.WriteByte(item.Type);
2005 writer.WriteByte(0);
2006 writer.WriteReference(item.Parent, metadataSizes.HasConstantCodedIndexIsSmall);
2007 writer.WriteReference(SerializeHandle(item.Value), metadataSizes.BlobReferenceIsSmall);
2008 }
2009 }
2010
2012 {
2015 {
2017 enumerable = customAttributeTable;
2018 }
2019 else
2020 {
2021 enumerable = _customAttributeTable.OrderBy((CustomAttributeRow x, CustomAttributeRow y) => x.Parent - y.Parent);
2022 }
2025 {
2026 writer.WriteReference(item.Parent, metadataSizes.HasCustomAttributeCodedIndexIsSmall);
2027 writer.WriteReference(item.Type, metadataSizes.CustomAttributeTypeCodedIndexIsSmall);
2028 writer.WriteReference(SerializeHandle(item.Value), metadataSizes.BlobReferenceIsSmall);
2029 }
2030 }
2031
2033 {
2036 {
2038 enumerable = fieldMarshalTable;
2039 }
2040 else
2041 {
2042 enumerable = _fieldMarshalTable.OrderBy((FieldMarshalRow x, FieldMarshalRow y) => x.Parent - y.Parent);
2043 }
2045 foreach (FieldMarshalRow item in enumerable2)
2046 {
2047 writer.WriteReference(item.Parent, metadataSizes.HasFieldMarshalCodedIndexIsSmall);
2048 writer.WriteReference(SerializeHandle(item.NativeType), metadataSizes.BlobReferenceIsSmall);
2049 }
2050 }
2051
2053 {
2056 {
2058 enumerable = declSecurityTable;
2059 }
2060 else
2061 {
2062 enumerable = _declSecurityTable.OrderBy((DeclSecurityRow x, DeclSecurityRow y) => x.Parent - y.Parent);
2063 }
2065 foreach (DeclSecurityRow item in enumerable2)
2066 {
2067 writer.WriteUInt16(item.Action);
2068 writer.WriteReference(item.Parent, metadataSizes.DeclSecurityCodedIndexIsSmall);
2069 writer.WriteReference(SerializeHandle(item.PermissionSet), metadataSizes.BlobReferenceIsSmall);
2070 }
2071 }
2072
2074 {
2076 {
2077 writer.WriteUInt16(item.PackingSize);
2078 writer.WriteUInt32(item.ClassSize);
2079 writer.WriteReference(item.Parent, metadataSizes.TypeDefReferenceIsSmall);
2080 }
2081 }
2082
2084 {
2086 {
2087 writer.WriteInt32(item.Offset);
2088 writer.WriteReference(item.Field, metadataSizes.FieldDefReferenceIsSmall);
2089 }
2090 }
2091
2093 {
2095 {
2096 writer.WriteReference(SerializeHandle(item.Signature), metadataSizes.BlobReferenceIsSmall);
2097 }
2098 }
2099
2101 {
2102 foreach (EventMapRow item in _eventMapTable)
2103 {
2104 writer.WriteReference(item.Parent, metadataSizes.TypeDefReferenceIsSmall);
2105 writer.WriteReference(item.EventList, metadataSizes.EventDefReferenceIsSmall);
2106 }
2107 }
2108
2110 {
2111 foreach (EventRow item in _eventTable)
2112 {
2113 writer.WriteUInt16(item.EventFlags);
2114 writer.WriteReference(SerializeHandle(stringMap, item.Name), metadataSizes.StringReferenceIsSmall);
2115 writer.WriteReference(item.EventType, metadataSizes.TypeDefOrRefCodedIndexIsSmall);
2116 }
2117 }
2118
2120 {
2122 {
2123 writer.WriteReference(item.Parent, metadataSizes.TypeDefReferenceIsSmall);
2124 writer.WriteReference(item.PropertyList, metadataSizes.PropertyDefReferenceIsSmall);
2125 }
2126 }
2127
2129 {
2130 foreach (PropertyRow item in _propertyTable)
2131 {
2132 writer.WriteUInt16(item.PropFlags);
2133 writer.WriteReference(SerializeHandle(stringMap, item.Name), metadataSizes.StringReferenceIsSmall);
2134 writer.WriteReference(SerializeHandle(item.Type), metadataSizes.BlobReferenceIsSmall);
2135 }
2136 }
2137
2139 {
2142 {
2144 enumerable = methodSemanticsTable;
2145 }
2146 else
2147 {
2149 }
2152 {
2153 writer.WriteUInt16(item.Semantic);
2154 writer.WriteReference(item.Method, metadataSizes.MethodDefReferenceIsSmall);
2155 writer.WriteReference(item.Association, metadataSizes.HasSemanticsCodedIndexIsSmall);
2156 }
2157 }
2158
2160 {
2162 {
2163 writer.WriteReference(item.Class, metadataSizes.TypeDefReferenceIsSmall);
2164 writer.WriteReference(item.MethodBody, metadataSizes.MethodDefOrRefCodedIndexIsSmall);
2165 writer.WriteReference(item.MethodDecl, metadataSizes.MethodDefOrRefCodedIndexIsSmall);
2166 }
2167 }
2168
2170 {
2171 foreach (ModuleRefRow item in _moduleRefTable)
2172 {
2173 writer.WriteReference(SerializeHandle(stringMap, item.Name), metadataSizes.StringReferenceIsSmall);
2174 }
2175 }
2176
2178 {
2179 foreach (TypeSpecRow item in _typeSpecTable)
2180 {
2181 writer.WriteReference(SerializeHandle(item.Signature), metadataSizes.BlobReferenceIsSmall);
2182 }
2183 }
2184
2186 {
2187 foreach (ImplMapRow item in _implMapTable)
2188 {
2189 writer.WriteUInt16(item.MappingFlags);
2190 writer.WriteReference(item.MemberForwarded, metadataSizes.MemberForwardedCodedIndexIsSmall);
2191 writer.WriteReference(SerializeHandle(stringMap, item.ImportName), metadataSizes.StringReferenceIsSmall);
2192 writer.WriteReference(item.ImportScope, metadataSizes.ModuleRefReferenceIsSmall);
2193 }
2194 }
2195
2197 {
2198 foreach (FieldRvaRow item in _fieldRvaTable)
2199 {
2200 writer.WriteInt32(mappedFieldDataStreamRva + item.Offset);
2201 writer.WriteReference(item.Field, metadataSizes.FieldDefReferenceIsSmall);
2202 }
2203 }
2204
2206 {
2207 if (_assemblyRow.HasValue)
2208 {
2209 Version version = _assemblyRow.Value.Version;
2210 writer.WriteUInt32(_assemblyRow.Value.HashAlgorithm);
2211 writer.WriteUInt16((ushort)version.Major);
2212 writer.WriteUInt16((ushort)version.Minor);
2213 writer.WriteUInt16((ushort)version.Build);
2214 writer.WriteUInt16((ushort)version.Revision);
2215 writer.WriteUInt32(_assemblyRow.Value.Flags);
2216 writer.WriteReference(SerializeHandle(_assemblyRow.Value.AssemblyKey), metadataSizes.BlobReferenceIsSmall);
2217 writer.WriteReference(SerializeHandle(stringMap, _assemblyRow.Value.AssemblyName), metadataSizes.StringReferenceIsSmall);
2218 writer.WriteReference(SerializeHandle(stringMap, _assemblyRow.Value.AssemblyCulture), metadataSizes.StringReferenceIsSmall);
2219 }
2220 }
2221
2223 {
2225 {
2226 writer.WriteUInt16((ushort)item.Version.Major);
2227 writer.WriteUInt16((ushort)item.Version.Minor);
2228 writer.WriteUInt16((ushort)item.Version.Build);
2229 writer.WriteUInt16((ushort)item.Version.Revision);
2230 writer.WriteUInt32(item.Flags);
2231 writer.WriteReference(SerializeHandle(item.PublicKeyToken), metadataSizes.BlobReferenceIsSmall);
2232 writer.WriteReference(SerializeHandle(stringMap, item.Name), metadataSizes.StringReferenceIsSmall);
2233 writer.WriteReference(SerializeHandle(stringMap, item.Culture), metadataSizes.StringReferenceIsSmall);
2234 writer.WriteReference(SerializeHandle(item.HashValue), metadataSizes.BlobReferenceIsSmall);
2235 }
2236 }
2237
2239 {
2240 foreach (FileTableRow item in _fileTable)
2241 {
2242 writer.WriteUInt32(item.Flags);
2243 writer.WriteReference(SerializeHandle(stringMap, item.FileName), metadataSizes.StringReferenceIsSmall);
2244 writer.WriteReference(SerializeHandle(item.HashValue), metadataSizes.BlobReferenceIsSmall);
2245 }
2246 }
2247
2249 {
2251 {
2252 writer.WriteUInt32(item.Flags);
2253 writer.WriteInt32(item.TypeDefId);
2254 writer.WriteReference(SerializeHandle(stringMap, item.TypeName), metadataSizes.StringReferenceIsSmall);
2255 writer.WriteReference(SerializeHandle(stringMap, item.TypeNamespace), metadataSizes.StringReferenceIsSmall);
2256 writer.WriteReference(item.Implementation, metadataSizes.ImplementationCodedIndexIsSmall);
2257 }
2258 }
2259
2261 {
2263 {
2264 writer.WriteUInt32(item.Offset);
2265 writer.WriteUInt32(item.Flags);
2266 writer.WriteReference(SerializeHandle(stringMap, item.Name), metadataSizes.StringReferenceIsSmall);
2267 writer.WriteReference(item.Implementation, metadataSizes.ImplementationCodedIndexIsSmall);
2268 }
2269 }
2270
2272 {
2274 {
2275 writer.WriteReference(item.NestedClass, metadataSizes.TypeDefReferenceIsSmall);
2276 writer.WriteReference(item.EnclosingClass, metadataSizes.TypeDefReferenceIsSmall);
2277 }
2278 }
2279
2281 {
2283 {
2284 writer.WriteUInt16(item.Number);
2285 writer.WriteUInt16(item.Flags);
2286 writer.WriteReference(item.Owner, metadataSizes.TypeOrMethodDefCodedIndexIsSmall);
2287 writer.WriteReference(SerializeHandle(stringMap, item.Name), metadataSizes.StringReferenceIsSmall);
2288 }
2289 }
2290
2292 {
2294 {
2295 writer.WriteReference(item.Owner, metadataSizes.GenericParamReferenceIsSmall);
2296 writer.WriteReference(item.Constraint, metadataSizes.TypeDefOrRefCodedIndexIsSmall);
2297 }
2298 }
2299
2301 {
2303 {
2304 writer.WriteReference(item.Method, metadataSizes.MethodDefOrRefCodedIndexIsSmall);
2305 writer.WriteReference(SerializeHandle(item.Instantiation), metadataSizes.BlobReferenceIsSmall);
2306 }
2307 }
2308
2310 {
2311 foreach (DocumentRow item in _documentTable)
2312 {
2313 writer.WriteReference(SerializeHandle(item.Name), metadataSizes.BlobReferenceIsSmall);
2314 writer.WriteReference(SerializeHandle(item.HashAlgorithm), metadataSizes.GuidReferenceIsSmall);
2315 writer.WriteReference(SerializeHandle(item.Hash), metadataSizes.BlobReferenceIsSmall);
2316 writer.WriteReference(SerializeHandle(item.Language), metadataSizes.GuidReferenceIsSmall);
2317 }
2318 }
2319
2321 {
2323 {
2324 writer.WriteReference(item.Document, metadataSizes.DocumentReferenceIsSmall);
2325 writer.WriteReference(SerializeHandle(item.SequencePoints), metadataSizes.BlobReferenceIsSmall);
2326 }
2327 }
2328
2330 {
2332 {
2333 writer.WriteReference(item.Method, metadataSizes.MethodDefReferenceIsSmall);
2334 writer.WriteReference(item.ImportScope, metadataSizes.ImportScopeReferenceIsSmall);
2335 writer.WriteReference(item.VariableList, metadataSizes.LocalVariableReferenceIsSmall);
2336 writer.WriteReference(item.ConstantList, metadataSizes.LocalConstantReferenceIsSmall);
2337 writer.WriteInt32(item.StartOffset);
2338 writer.WriteInt32(item.Length);
2339 }
2340 }
2341
2343 {
2345 {
2346 writer.WriteUInt16(item.Attributes);
2347 writer.WriteUInt16(item.Index);
2348 writer.WriteReference(SerializeHandle(stringMap, item.Name), metadataSizes.StringReferenceIsSmall);
2349 }
2350 }
2351
2353 {
2355 {
2356 writer.WriteReference(SerializeHandle(stringMap, item.Name), metadataSizes.StringReferenceIsSmall);
2357 writer.WriteReference(SerializeHandle(item.Signature), metadataSizes.BlobReferenceIsSmall);
2358 }
2359 }
2360
2362 {
2364 {
2365 writer.WriteReference(item.Parent, metadataSizes.ImportScopeReferenceIsSmall);
2366 writer.WriteReference(SerializeHandle(item.Imports), metadataSizes.BlobReferenceIsSmall);
2367 }
2368 }
2369
2371 {
2373 {
2374 writer.WriteReference(item.MoveNextMethod, metadataSizes.MethodDefReferenceIsSmall);
2375 writer.WriteReference(item.KickoffMethod, metadataSizes.MethodDefReferenceIsSmall);
2376 }
2377 }
2378
2380 {
2382 {
2383 int num = x.Parent - y.Parent;
2384 return (num == 0) ? (x.Kind.Index - y.Kind.Index) : num;
2385 }))
2386 {
2387 writer.WriteReference(item.Parent, metadataSizes.HasCustomDebugInformationCodedIndexIsSmall);
2388 writer.WriteReference(SerializeHandle(item.Kind), metadataSizes.GuidReferenceIsSmall);
2389 writer.WriteReference(SerializeHandle(item.Value), metadataSizes.BlobReferenceIsSmall);
2390 }
2391 }
2392
2394 {
2395 if (userStringHeapStartOffset >= 16777215)
2396 {
2398 }
2400 {
2401 Throw.ArgumentOutOfRange("userStringHeapStartOffset");
2402 }
2403 if (stringHeapStartOffset < 0)
2404 {
2405 Throw.ArgumentOutOfRange("stringHeapStartOffset");
2406 }
2407 if (blobHeapStartOffset < 0)
2408 {
2409 Throw.ArgumentOutOfRange("blobHeapStartOffset");
2410 }
2411 if (guidHeapStartOffset < 0)
2412 {
2413 Throw.ArgumentOutOfRange("guidHeapStartOffset");
2414 }
2415 if (guidHeapStartOffset % 16 != 0)
2416 {
2417 throw new ArgumentException(System.SR.Format(System.SR.ValueMustBeMultiple, 16), "guidHeapStartOffset");
2418 }
2421 _blobHeapSize = 1;
2426 }
2427
2429 {
2430 if (byteCount < 0)
2431 {
2432 Throw.ArgumentOutOfRange("byteCount");
2433 }
2434 switch (heap)
2435 {
2436 case HeapIndex.Guid:
2438 break;
2439 case HeapIndex.String:
2441 break;
2442 case HeapIndex.UserString:
2444 break;
2445 default:
2446 Throw.ArgumentOutOfRange("heap");
2447 break;
2448 case HeapIndex.Blob:
2449 break;
2450 }
2451 }
2452
2454 {
2455 return map[handle.GetWriterVirtualIndex()];
2456 }
2457
2459 {
2460 return handle.GetHeapOffset();
2461 }
2462
2464 {
2465 return handle.Index;
2466 }
2467
2469 {
2470 return handle.GetHeapOffset();
2471 }
2472
2474 {
2475 if (value == null)
2476 {
2477 Throw.ArgumentNull("value");
2478 }
2479 return GetOrAddBlob(value.ToImmutableArray());
2480 }
2481
2483 {
2484 if (value == null)
2485 {
2486 Throw.ArgumentNull("value");
2487 }
2488 return GetOrAddBlob(ImmutableArray.Create(value));
2489 }
2490
2492 {
2493 if (value.IsDefault)
2494 {
2495 Throw.ArgumentNull("value");
2496 }
2498 {
2502 }
2503 return value2;
2504 }
2505
2507 {
2508 if (value is string value2)
2509 {
2510 return GetOrAddBlobUTF16(value2);
2511 }
2513 instance.WriteConstant(value);
2514 BlobHandle orAddBlob = GetOrAddBlob(instance);
2515 instance.Free();
2516 return orAddBlob;
2517 }
2518
2520 {
2522 instance.WriteUTF16(value);
2523 BlobHandle orAddBlob = GetOrAddBlob(instance);
2524 instance.Free();
2525 return orAddBlob;
2526 }
2527
2529 {
2532 BlobHandle orAddBlob = GetOrAddBlob(instance);
2533 instance.Free();
2534 return orAddBlob;
2535 }
2536
2538 {
2539 if (value == null)
2540 {
2541 Throw.ArgumentNull("value");
2542 }
2543 char c = ChooseSeparator(value);
2545 instance.WriteByte((byte)c);
2547 int num = 0;
2548 while (true)
2549 {
2550 int num2 = value.IndexOf(c, num);
2551 instance2.WriteUTF8(value, num, ((num2 >= 0) ? num2 : value.Length) - num, allowUnpairedSurrogates: true, prependSize: false);
2553 if (num2 == -1)
2554 {
2555 break;
2556 }
2557 if (num2 == value.Length - 1)
2558 {
2559 instance.WriteByte(0);
2560 break;
2561 }
2562 instance2.Clear();
2563 num = num2 + 1;
2564 }
2565 instance2.Free();
2566 BlobHandle orAddBlob = GetOrAddBlob(instance);
2567 instance.Free();
2568 return orAddBlob;
2569 }
2570
2571 private static char ChooseSeparator(string str)
2572 {
2573 int num = 0;
2574 int num2 = 0;
2575 for (int i = 0; i < str.Length; i++)
2576 {
2577 switch (str[i])
2578 {
2579 case '/':
2580 num++;
2581 break;
2582 case '\\':
2583 num2++;
2584 break;
2585 }
2586 }
2587 if (num < num2)
2588 {
2589 return '\\';
2590 }
2591 return '/';
2592 }
2593
2595 {
2596 if (guid == Guid.Empty)
2597 {
2598 return default(GuidHandle);
2599 }
2600 if (_guids.TryGetValue(guid, out var value))
2601 {
2602 return value;
2603 }
2605 _guids.Add(guid, value);
2606 _guidBuilder.WriteGuid(guid);
2607 return value;
2608 }
2609
2616
2618 {
2619 return GuidHandle.FromIndex((_guidBuilder.Count >> 4) + 1);
2620 }
2621
2623 {
2624 if (value == null)
2625 {
2626 Throw.ArgumentNull("value");
2627 }
2629 if (value.Length == 0)
2630 {
2631 value2 = default(StringHandle);
2632 }
2633 else if (!_strings.TryGetValue(value, out value2))
2634 {
2637 }
2638 return value2;
2639 }
2640
2652
2654 {
2655 if (value == null)
2656 {
2657 Throw.ArgumentNull("value");
2658 }
2660 {
2664 }
2665 return value2;
2666 }
2667
2669 {
2671 if (num >= 16777216)
2672 {
2674 }
2675 return UserStringHandle.FromOffset(num);
2676 }
2677
2679 {
2681 list.Sort(SuffixSort.Instance);
2682 int num = list.Count + 1;
2683 ImmutableArray<int>.Builder builder = ImmutableArray.CreateBuilder<int>(num);
2684 builder.Count = num;
2685 builder[0] = 0;
2686 heapBuilder.WriteByte(0);
2687 string text = string.Empty;
2689 {
2691 if (text.EndsWith(item.Key, StringComparison.Ordinal) && !BlobUtilities.IsLowSurrogateChar(item.Key[0]))
2692 {
2693 builder[item.Value.GetWriterVirtualIndex()] = num2 - (BlobUtilities.GetUTF8ByteCount(item.Key) + 1);
2694 }
2695 else
2696 {
2697 builder[item.Value.GetWriterVirtualIndex()] = num2;
2698 heapBuilder.WriteUTF8(item.Key, allowUnpairedSurrogates: false);
2699 heapBuilder.WriteByte(0);
2700 }
2701 text = item.Key;
2702 }
2703 return builder.MoveToImmutable();
2704 }
2705
2713
2715 {
2717 BlobWriter blobWriter = new BlobWriter(builder.ReserveBytes(_blobHeapSize + num));
2720 {
2721 int heapOffset = blob.Value.GetHeapOffset();
2722 ImmutableArray<byte> key = blob.Key;
2723 blobWriter.Offset = ((heapOffset != 0) ? (heapOffset - blobHeapStartOffset) : 0);
2724 blobWriter.WriteCompressedInteger(key.Length);
2725 blobWriter.WriteBytes(key);
2726 }
2727 blobWriter.Offset = _blobHeapSize;
2728 blobWriter.WriteBytes(0, num);
2729 }
2730
2731 private static void WriteAligned(BlobBuilder source, BlobBuilder target)
2732 {
2733 int count = source.Count;
2734 target.LinkSuffix(source);
2735 target.WriteBytes(0, BitArithmetic.Align(count, 4) - count);
2736 }
2737}
bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value)
void Add(TKey key, TValue value)
static byte Max(byte val1, byte val2)
Definition Math.cs:738
static bool IsLowSurrogateChar(int c)
static unsafe int GetUTF8ByteCount(string str)
static int GetUserStringByteLength(int characterCount)
static uint Align(uint position, uint alignment)
static readonly ByteSequenceComparer Instance
unsafe void WriteUTF16(char[] value)
void LinkSuffix(BlobBuilder suffix)
void WriteUTF8(string value, bool allowUnpairedSurrogates=true)
void WriteBytes(byte value, int byteCount)
static int ResolutionScope(EntityHandle handle)
static int HasFieldMarshal(EntityHandle handle)
static int TypeOrMethodDef(EntityHandle handle)
static int HasConstant(EntityHandle handle)
static int TypeDefOrRefOrSpec(EntityHandle handle)
static int MemberForwarded(EntityHandle handle)
static int CustomAttributeType(EntityHandle handle)
static int HasDeclSecurity(EntityHandle handle)
static int HasCustomAttribute(EntityHandle handle)
static int MethodDefOrRef(EntityHandle handle)
static int HasSemantics(EntityHandle handle)
static int Implementation(EntityHandle handle)
static int HasCustomDebugInformation(EntityHandle handle)
static int MemberRefParent(EntityHandle handle)
int Compare(KeyValuePair< string, StringHandle > xPair, KeyValuePair< string, StringHandle > yPair)
void SerializeModuleRefTable(BlobBuilder writer, ImmutableArray< int > stringMap, MetadataSizes metadataSizes)
void SerializeAssemblyTable(BlobBuilder writer, ImmutableArray< int > stringMap, MetadataSizes metadataSizes)
TypeDefinitionHandle AddTypeDefinition(TypeAttributes attributes, StringHandle @namespace, StringHandle name, EntityHandle baseType, FieldDefinitionHandle fieldList, MethodDefinitionHandle methodList)
void SerializeClassLayoutTable(BlobBuilder writer, MetadataSizes metadataSizes)
readonly List< ExportedTypeRow > _exportedTypeTable
void AddStateMachineMethod(MethodDefinitionHandle moveNextMethod, MethodDefinitionHandle kickoffMethod)
int SerializeHandle(ImmutableArray< int > map, StringHandle handle)
void SerializeDocumentTable(BlobBuilder writer, MetadataSizes metadataSizes)
void SerializeMemberRefTable(BlobBuilder writer, ImmutableArray< int > stringMap, MetadataSizes metadataSizes)
void SerializeGenericParamConstraintTable(BlobBuilder writer, MetadataSizes metadataSizes)
void SerializeTypeDefTable(BlobBuilder writer, ImmutableArray< int > stringMap, MetadataSizes metadataSizes)
void SerializeMethodImplTable(BlobBuilder writer, MetadataSizes metadataSizes)
void SerializeFieldRvaTable(BlobBuilder writer, MetadataSizes metadataSizes, int mappedFieldDataStreamRva)
readonly List< GenericParamRow > _genericParamTable
readonly Dictionary< ImmutableArray< byte >, BlobHandle > _blobs
LocalVariableHandle AddLocalVariable(LocalVariableAttributes attributes, int index, StringHandle name)
MethodDebugInformationHandle AddMethodDebugInformation(DocumentHandle document, BlobHandle sequencePoints)
void SerializeTypeSpecTable(BlobBuilder writer, MetadataSizes metadataSizes)
void SerializeGenericParamTable(BlobBuilder writer, ImmutableArray< int > stringMap, MetadataSizes metadataSizes)
void SerializeLocalConstantTable(BlobBuilder writer, ImmutableArray< int > stringMap, MetadataSizes metadataSizes)
AssemblyFileHandle AddAssemblyFile(StringHandle name, BlobHandle hashValue, bool containsMetadata)
DocumentHandle AddDocument(BlobHandle name, GuidHandle hashAlgorithm, BlobHandle hash, GuidHandle language)
ConstantHandle AddConstant(EntityHandle parent, object? value)
FieldDefinitionHandle AddFieldDefinition(FieldAttributes attributes, StringHandle name, BlobHandle signature)
void SerializeMetadataTables(BlobBuilder writer, MetadataSizes metadataSizes, ImmutableArray< int > stringMap, int methodBodyStreamRva, int mappedFieldDataStreamRva)
void SerializeLocalScopeTable(BlobBuilder writer, MetadataSizes metadataSizes)
static void WriteAligned(BlobBuilder source, BlobBuilder target)
readonly List< InterfaceImplRow > _interfaceImplTable
static void SerializeStreamHeader(ref int offsetFromStartOfMetadata, int alignedStreamSize, string streamName, BlobBuilder builder)
readonly List< StandaloneSigRow > _standAloneSigTable
readonly List< PropertyMapRow > _propertyMapTable
void SerializeDeclSecurityTable(BlobBuilder writer, MetadataSizes metadataSizes)
readonly List< AssemblyRefTableRow > _assemblyRefTable
void SerializeTypeRefTable(BlobBuilder writer, ImmutableArray< int > stringMap, MetadataSizes metadataSizes)
void SerializeFileTable(BlobBuilder writer, ImmutableArray< int > stringMap, MetadataSizes metadataSizes)
void SerializeInterfaceImplTable(BlobBuilder writer, MetadataSizes metadataSizes)
MetadataBuilder(int userStringHeapStartOffset=0, int stringHeapStartOffset=0, int blobHeapStartOffset=0, int guidHeapStartOffset=0)
void AddMarshallingDescriptor(EntityHandle parent, BlobHandle descriptor)
readonly List< CustomAttributeRow > _customAttributeTable
void SerializeLocalVariableTable(BlobBuilder writer, ImmutableArray< int > stringMap, MetadataSizes metadataSizes)
static void SerializeMetadataHeader(BlobBuilder builder, string metadataVersion, MetadataSizes sizes)
EventDefinitionHandle AddEvent(EventAttributes attributes, StringHandle name, EntityHandle type)
void SerializeMethodDefTable(BlobBuilder writer, ImmutableArray< int > stringMap, MetadataSizes metadataSizes, int methodBodyStreamRva)
ExportedTypeHandle AddExportedType(TypeAttributes attributes, StringHandle @namespace, StringHandle name, EntityHandle implementation, int typeDefinitionId)
TypeReferenceHandle AddTypeReference(EntityHandle resolutionScope, StringHandle @namespace, StringHandle name)
AssemblyReferenceHandle AddAssemblyReference(StringHandle name, Version version, StringHandle culture, BlobHandle publicKeyOrToken, AssemblyFlags flags, BlobHandle hashValue)
TypeSpecificationHandle AddTypeSpecification(BlobHandle signature)
ImportScopeHandle AddImportScope(ImportScopeHandle parentScope, BlobHandle imports)
void AddMethodImport(MethodDefinitionHandle method, MethodImportAttributes attributes, StringHandle name, ModuleReferenceHandle module)
void SerializeAssemblyRefTable(BlobBuilder writer, ImmutableArray< int > stringMap, MetadataSizes metadataSizes)
readonly List< ManifestResourceRow > _manifestResourceTable
void SerializeCustomDebugInformationTable(BlobBuilder writer, MetadataSizes metadataSizes)
static ImmutableArray< int > SerializeStringHeap(BlobBuilder heapBuilder, Dictionary< string, StringHandle > strings, int stringHeapStartOffset)
void SerializeExportedTypeTable(BlobBuilder writer, ImmutableArray< int > stringMap, MetadataSizes metadataSizes)
ModuleReferenceHandle AddModuleReference(StringHandle moduleName)
SerializedMetadata GetSerializedMetadata(ImmutableArray< int > externalRowCounts, int metadataVersionByteCount, bool isStandaloneDebugMetadata)
MethodSpecificationHandle AddMethodSpecification(EntityHandle method, BlobHandle instantiation)
readonly List< GenericParamConstraintRow > _genericParamConstraintTable
void SerializeTablesHeader(BlobBuilder writer, MetadataSizes metadataSizes)
MemberReferenceHandle AddMemberReference(EntityHandle parent, StringHandle name, BlobHandle signature)
GenericParameterConstraintHandle AddGenericParameterConstraint(GenericParameterHandle genericParameter, EntityHandle constraint)
readonly List< FieldLayoutRow > _fieldLayoutTable
void SerializeParamTable(BlobBuilder writer, ImmutableArray< int > stringMap, MetadataSizes metadataSizes)
ModuleDefinitionHandle AddModule(int generation, StringHandle moduleName, GuidHandle mvid, GuidHandle encId, GuidHandle encBaseId)
PropertyDefinitionHandle AddProperty(PropertyAttributes attributes, StringHandle name, BlobHandle signature)
CustomDebugInformationHandle AddCustomDebugInformation(EntityHandle parent, GuidHandle kind, BlobHandle value)
readonly List< CustomDebugInformationRow > _customDebugInformationTable
void SerializeStandAloneSigTable(BlobBuilder writer, MetadataSizes metadataSizes)
void AddFieldRelativeVirtualAddress(FieldDefinitionHandle field, int offset)
readonly Dictionary< string, StringHandle > _strings
void AddPropertyMap(TypeDefinitionHandle declaringType, PropertyDefinitionHandle propertyList)
void SerializePropertyMapTable(BlobBuilder writer, MetadataSizes metadataSizes)
readonly List< MethodSemanticsRow > _methodSemanticsTable
void SetCapacity(TableIndex table, int rowCount)
CustomAttributeHandle AddCustomAttribute(EntityHandle parent, EntityHandle constructor, BlobHandle value)
void SerializeNestedClassTable(BlobBuilder writer, MetadataSizes metadataSizes)
static void SetTableCapacity< T >(List< T > table, int rowCount)
void SerializeModuleTable(BlobBuilder writer, ImmutableArray< int > stringMap, MetadataSizes metadataSizes)
void WriteHeapsTo(BlobBuilder builder, BlobBuilder stringHeap)
LocalScopeHandle AddLocalScope(MethodDefinitionHandle method, ImportScopeHandle importScope, LocalVariableHandle variableList, LocalConstantHandle constantList, int startOffset, int length)
readonly List< LocalVariableRow > _localVariableTable
void AddEventMap(TypeDefinitionHandle declaringType, EventDefinitionHandle eventList)
void SerializeStateMachineMethodTable(BlobBuilder writer, MetadataSizes metadataSizes)
void SerializeFieldLayoutTable(BlobBuilder writer, MetadataSizes metadataSizes)
InterfaceImplementationHandle AddInterfaceImplementation(TypeDefinitionHandle type, EntityHandle implementedInterface)
readonly List< ClassLayoutRow > _classLayoutTable
GenericParameterHandle AddGenericParameter(EntityHandle parent, GenericParameterAttributes attributes, StringHandle name, int index)
MethodImplementationHandle AddMethodImplementation(TypeDefinitionHandle type, EntityHandle methodBody, EntityHandle methodDeclaration)
StandaloneSignatureHandle AddStandaloneSignature(BlobHandle signature)
readonly Dictionary< string, UserStringHandle > _userStrings
BlobHandle GetOrAddBlobUTF8(string value, bool allowUnpairedSurrogates=true)
void SerializeFieldTable(BlobBuilder writer, ImmutableArray< int > stringMap, MetadataSizes metadataSizes)
void SerializeImportScopeTable(BlobBuilder writer, MetadataSizes metadataSizes)
void SerializeImplMapTable(BlobBuilder writer, ImmutableArray< int > stringMap, MetadataSizes metadataSizes)
readonly List< LocalConstantRow > _localConstantTable
void AddTypeLayout(TypeDefinitionHandle type, ushort packingSize, uint size)
readonly List< ImportScopeRow > _importScopeTable
ReservedBlob< UserStringHandle > ReserveUserString(int length)
void AddMethodSemantics(EntityHandle association, MethodSemanticsAttributes semantics, MethodDefinitionHandle methodDefinition)
void SetCapacity(HeapIndex heap, int byteCount)
LocalConstantHandle AddLocalConstant(StringHandle name, BlobHandle signature)
readonly List< FieldMarshalRow > _fieldMarshalTable
readonly List< StateMachineMethodRow > _stateMachineMethodTable
ManifestResourceHandle AddManifestResource(ManifestResourceAttributes attributes, StringHandle name, EntityHandle implementation, uint offset)
DeclarativeSecurityAttributeHandle AddDeclarativeSecurityAttribute(EntityHandle parent, DeclarativeSecurityAction action, BlobHandle permissionSet)
MethodDefinitionHandle AddMethodDefinition(MethodAttributes attributes, MethodImplAttributes implAttributes, StringHandle name, BlobHandle signature, int bodyOffset, ParameterHandle parameterList)
readonly List< MethodDebugInformationRow > _methodDebugInformationTable
void AddFieldLayout(FieldDefinitionHandle field, int offset)
AssemblyDefinitionHandle AddAssembly(StringHandle name, Version version, StringHandle culture, BlobHandle publicKey, AssemblyFlags flags, AssemblyHashAlgorithm hashAlgorithm)
readonly List< DeclSecurityRow > _declSecurityTable
void SerializeConstantTable(BlobBuilder writer, MetadataSizes metadataSizes)
readonly List< NestedClassRow > _nestedClassTable
void AddEncLogEntry(EntityHandle entity, EditAndContinueOperation code)
void AddNestedType(TypeDefinitionHandle type, TypeDefinitionHandle enclosingType)
void SerializeEventMapTable(BlobBuilder writer, MetadataSizes metadataSizes)
void SerializeCustomAttributeTable(BlobBuilder writer, MetadataSizes metadataSizes)
void SerializeFieldMarshalTable(BlobBuilder writer, MetadataSizes metadataSizes)
BlobHandle GetOrAddBlob(ImmutableArray< byte > value)
void SerializePropertyTable(BlobBuilder writer, ImmutableArray< int > stringMap, MetadataSizes metadataSizes)
void SerializeMethodSemanticsTable(BlobBuilder writer, MetadataSizes metadataSizes)
void SerializeMethodDebugInformationTable(BlobBuilder writer, MetadataSizes metadataSizes)
void SerializeEventTable(BlobBuilder writer, ImmutableArray< int > stringMap, MetadataSizes metadataSizes)
readonly Dictionary< Guid, GuidHandle > _guids
void SerializeManifestResourceTable(BlobBuilder writer, ImmutableArray< int > stringMap, MetadataSizes metadataSizes)
ParameterHandle AddParameter(ParameterAttributes attributes, StringHandle name, int sequenceNumber)
void SerializeMethodSpecTable(BlobBuilder writer, MetadataSizes metadataSizes)
static int GetMetadataStreamHeaderSize(string streamName)
static void SerializeRowCounts(BlobBuilder writer, ImmutableArray< int > rowCounts)
static void InvalidOperation_TableNotSorted(TableIndex tableIndex)
Definition Throw.cs:257
static void ArgumentNull(string parameterName)
Definition Throw.cs:110
static void InvalidOperation(string message)
Definition Throw.cs:68
static void ArgumentOutOfRange(string parameterName)
Definition Throw.cs:145
static void HeapSizeLimitExceeded(HeapIndex heap)
Definition Throw.cs:292
static string ValueMustBeMultiple
Definition SR.cs:218
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string ModuleAlreadyAdded
Definition SR.cs:194
static string AssemblyAlreadyAdded
Definition SR.cs:196
Definition SR.cs:7
static readonly Guid Empty
Definition Guid.cs:86
static AssemblyFileHandle FromRowId(int rowId)
static AssemblyReferenceHandle FromRowId(int rowId)
static BlobHandle FromOffset(int heapOffset)
Definition BlobHandle.cs:34
static ConstantHandle FromRowId(int rowId)
static CustomAttributeHandle FromRowId(int rowId)
static CustomDebugInformationHandle FromRowId(int rowId)
static DocumentHandle FromRowId(int rowId)
static readonly ModuleDefinitionHandle ModuleDefinition
static readonly AssemblyDefinitionHandle AssemblyDefinition
static EventDefinitionHandle FromRowId(int rowId)
static ExportedTypeHandle FromRowId(int rowId)
static FieldDefinitionHandle FromRowId(int rowId)
static GenericParameterHandle FromRowId(int rowId)
static GuidHandle FromIndex(int heapIndex)
Definition GuidHandle.cs:18
static ImportScopeHandle FromRowId(int rowId)
static InterfaceImplementationHandle FromRowId(int rowId)
static LocalConstantHandle FromRowId(int rowId)
static LocalScopeHandle FromRowId(int rowId)
static LocalVariableHandle FromRowId(int rowId)
static ManifestResourceHandle FromRowId(int rowId)
static MemberReferenceHandle FromRowId(int rowId)
static MethodDebugInformationHandle FromRowId(int rowId)
static MethodDefinitionHandle FromRowId(int rowId)
static MethodImplementationHandle FromRowId(int rowId)
static MethodSpecificationHandle FromRowId(int rowId)
static ModuleReferenceHandle FromRowId(int rowId)
static ParameterHandle FromRowId(int rowId)
static PropertyDefinitionHandle FromRowId(int rowId)
static StandaloneSignatureHandle FromRowId(int rowId)
static StringHandle FromWriterVirtualIndex(int virtualIndex)
static TypeDefinitionHandle FromRowId(int rowId)
static TypeReferenceHandle FromRowId(int rowId)
static TypeSpecificationHandle FromRowId(int rowId)
static UserStringHandle FromOffset(int heapOffset)