Author: jbevain
Date: 2007-06-13 05:22:52 -0400 (Wed, 13 Jun 2007)
New Revision: 79387
Modified:
trunk/cecil/lib/ChangeLog
trunk/cecil/lib/Mono.Cecil/ReflectionWriter.cs
trunk/cecil/lib/Mono.Cecil/StructureWriter.cs
Log:
2007-06-12 Jb Evain <[EMAIL PROTECTED]>
* Mono.Cecil/StructureWriter.cs,
Mono.Cecil/ReflectionWriter.cs:
Revert the on demand creation of memberref.
Modified: trunk/cecil/lib/ChangeLog
===================================================================
--- trunk/cecil/lib/ChangeLog 2007-06-13 09:15:08 UTC (rev 79386)
+++ trunk/cecil/lib/ChangeLog 2007-06-13 09:22:52 UTC (rev 79387)
@@ -1,5 +1,11 @@
2007-06-12 Jb Evain <[EMAIL PROTECTED]>
+ * Mono.Cecil/StructureWriter.cs,
+ Mono.Cecil/ReflectionWriter.cs:
+ Revert the on demand creation of memberref.
+
+2007-06-12 Jb Evain <[EMAIL PROTECTED]>
+
* Mono.Cecil/CallSite.cs
Mono.Cecil/ModuleReference.cs
Mono.Cecil/CustomAttribute.cs
Modified: trunk/cecil/lib/Mono.Cecil/ReflectionWriter.cs
===================================================================
--- trunk/cecil/lib/Mono.Cecil/ReflectionWriter.cs 2007-06-13 09:15:08 UTC
(rev 79386)
+++ trunk/cecil/lib/Mono.Cecil/ReflectionWriter.cs 2007-06-13 09:22:52 UTC
(rev 79387)
@@ -57,7 +57,6 @@
ArrayList m_fieldStack;
ArrayList m_genericParamStack;
IDictionary m_typeSpecCache;
- IDictionary m_memberRefCache;
uint m_methodIndex;
uint m_fieldIndex;
@@ -135,7 +134,6 @@
m_fieldStack = new ArrayList ();
m_genericParamStack = new ArrayList ();
m_typeSpecCache = new Hashtable ();
- m_memberRefCache = new Hashtable ();
m_methodIndex = 1;
m_fieldIndex = 1;
@@ -199,37 +197,7 @@
{
if (member is MethodSpecification)
return GetMemberRefToken
(((MethodSpecification) member).ElementMethod);
- if (member is IMemberDefinition)
- return member.MetadataToken;
- if (m_memberRefCache.Contains (member))
- return member.MetadataToken;
- MemberRefTable mrTable =
m_tableWriter.GetMemberRefTable ();
-
- uint sig = 0;
- if (member is FieldReference)
- sig = m_sigWriter.AddFieldSig (GetFieldSig
((FieldReference) member));
- else if (member is MethodReference)
- sig = m_sigWriter.AddMethodRefSig
(GetMethodRefSig ((MethodReference) member));
-
- MetadataToken declaringType = GetTypeDefOrRefToken
(member.DeclaringType);
- uint name = m_mdWriter.AddString (member.Name);
-
- for (int i = 0; i < mrTable.Rows.Count; i++) {
- MemberRefRow row = mrTable [i];
- if (row.Class == declaringType && row.Name ==
name && row.Signature == sig)
- return MetadataToken.FromMetadataRow
(TokenType.MemberRef, i);
- }
-
- MemberRefRow mrRow = m_rowWriter.CreateMemberRefRow (
- declaringType,
- name,
- sig);
-
- mrTable.Rows.Add (mrRow);
- member.MetadataToken = new MetadataToken (
- TokenType.MemberRef, (uint) mrTable.Rows.Count);
- m_memberRefCache [member] = member.MetadataToken;
return member.MetadataToken;
}
@@ -379,6 +347,30 @@
}
}
+ public override void VisitMemberReferenceCollection
(MemberReferenceCollection members)
+ {
+ if (members.Count == 0)
+ return;
+
+ MemberRefTable mrTable =
m_tableWriter.GetMemberRefTable ();
+ foreach (MemberReference member in members) {
+ uint sig = 0;
+ if (member is FieldReference)
+ sig = m_sigWriter.AddFieldSig
(GetFieldSig (member as FieldReference));
+ else if (member is MethodReference)
+ sig = m_sigWriter.AddMethodRefSig
(GetMethodRefSig ((MethodReference) member));
+
+ MemberRefRow mrRow =
m_rowWriter.CreateMemberRefRow (
+ GetTypeDefOrRefToken
(member.DeclaringType),
+ m_mdWriter.AddString (member.Name),
+ sig);
+
+ mrTable.Rows.Add (mrRow);
+ member.MetadataToken = new MetadataToken (
+ TokenType.MemberRef, (uint)
mrTable.Rows.Count);
+ }
+ }
+
public override void VisitGenericParameterCollection
(GenericParameterCollection parameters)
{
if (parameters.Count == 0)
@@ -423,7 +415,7 @@
MethodImplRow miRow =
m_rowWriter.CreateMethodImplRow (
GetRidFor
(meths.Container.DeclaringType as TypeDefinition),
new MetadataToken (TokenType.Method,
GetRidFor (meths.Container)),
- GetMemberRefToken (ov));
+ ov.MetadataToken);
miTable.Rows.Add (miRow);
}
Modified: trunk/cecil/lib/Mono.Cecil/StructureWriter.cs
===================================================================
--- trunk/cecil/lib/Mono.Cecil/StructureWriter.cs 2007-06-13 09:15:08 UTC
(rev 79386)
+++ trunk/cecil/lib/Mono.Cecil/StructureWriter.cs 2007-06-13 09:22:52 UTC
(rev 79387)
@@ -236,7 +236,7 @@
writer.VisitModuleDefinition (mod);
writer.VisitTypeReferenceCollection
(mod.TypeReferences);
writer.VisitTypeDefinitionCollection
(mod.Types);
- mod.MemberReferences.Clear ();
+ writer.VisitMemberReferenceCollection
(mod.MemberReferences);
writer.CompleteTypeDefinitions ();
writer.TerminateModuleDefinition (mod);
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches