internal void BuildMetaData(uint codeStartOffset)
{
codeStart = codeStartOffset;
BuildTable(metaDataTables[(int)MDTable.TypeDef]);
BuildTable(metaDataTables[(int)MDTable.TypeSpec]);
BuildTable(metaDataTables[(int)MDTable.MemberRef]);
#if NET_2_0
BuildTable(metaDataTables[(int)MDTable.GenericParam]);
BuildTable(metaDataTables[(int)MDTable.MethodSpec]);
BuildTable(metaDataTables[(int)MDTable.GenericParamConstraint]);
#endif
BuildTable(metaDataTables[(int)MDTable.ManifestResource]);
if (cattr_list != null) {
foreach (CustomAttribute cattr in cattr_list)
cattr.BuildTables (this);
}
if (declsec_list != null) {
foreach (BaseDeclSecurity decl_sec in declsec_list)
decl_sec.BuildTables (this);
}
/* for (int i=0; i < metaDataTables.Length; i++) {
ArrayList table = metaDataTables[i];
if (table != null) {
for (int j=0; j < table.Count; j++) {
((MetaDataElement)table[j]).BuildTables(this);
}
}
}
*/
SetIndexSizes();
for (int i=1; i < numStreams; i++) {
streams[i].EndStream();
}
CalcTildeStreamSize();
SetStreamOffsets();
byteCodePadding = NumToAlign(codeSize,4);
if (entryPoint != null) file.SetEntryPoint(entryPoint.Token());
// Check ordering of specific tables
// Constant, CustomAttribute, FieldMarshal, DeclSecurity, MethodSemantics
// ImplMap, GenericParam
// Need to load GenericParamConstraint AFTER GenericParam table in correct order
// The tables:
// InterfaceImpl, ClassLayout, FieldLayout, MethodImpl, FieldRVA, NestedClass
// will _ALWAYS_ be in the correct order as embedded in BuildMDTables
SortTable(metaDataTables[(int)MDTable.Constant]);
SortTable(metaDataTables[(int)MDTable.FieldMarshal]);
SortTable(metaDataTables[(int)MDTable.DeclSecurity]);
SortTable(metaDataTables[(int)MDTable.MethodSemantics]);
SortTable(metaDataTables[(int)MDTable.ImplMap]);
#if NET_2_0
if (metaDataTables[(int)MDTable.GenericParam] != null) {
SortTable(metaDataTables[(int)MDTable.GenericParam]);
// Now add GenericParamConstraints
/*for (int i=0; i < metaDataTables[(int)MDTable.GenericParam].Count; i++) {
((GenericParameter)metaDataTables[(int)MDTable.GenericParam][i]).AddConstraints(this);
}*/
}
SortTable(metaDataTables[(int)MDTable.GenericParamConstraint]);
#endif
SortTable(metaDataTables[(int)MDTable.InterfaceImpl]);
SortTable(metaDataTables[(int)MDTable.CustomAttribute]);
}