Jelajahi Sumber

Code to ensure uniqueness of external reference descriptor objects.

k_john_gough_cp 14 tahun lalu
induk
melakukan
84fd47006e
1 mengubah file dengan 11 tambahan dan 4 penghapusan
  1. 11 4
      PERWAPI/PEFile.cs

+ 11 - 4
PERWAPI/PEFile.cs

@@ -18,6 +18,7 @@
 using System;
 using System.IO;
 using System.Collections;
+using System.Collections.Generic;
 
 namespace QUT.PERWAPI
 {
@@ -45,6 +46,8 @@ namespace QUT.PERWAPI
         internal MetaDataTables metaDataTables;
         internal PEFileVersionInfo versionInfo;
 
+        private Dictionary<string, AssemblyRef> asmRefDict = new Dictionary<string, AssemblyRef>();
+
         /*-------------------- Constructors ---------------------------------*/
 
         /// <summary>
@@ -164,10 +167,14 @@ namespace QUT.PERWAPI
         /// </summary>
         /// <param name="assemName">the external assembly name</param>
         /// <returns>a descriptor for this external assembly</returns>
-        public AssemblyRef MakeExternAssembly(string assemName)
-        {
-            if (assemName.CompareTo(MSCorLib.mscorlib.Name()) == 0) return MSCorLib.mscorlib;
-            return new AssemblyRef(assemName);
+        public AssemblyRef MakeExternAssembly(string assemName) {
+          AssemblyRef result = null;
+          if (assemName.CompareTo(MSCorLib.mscorlib.Name()) == 0) return MSCorLib.mscorlib;
+          else if (!asmRefDict.TryGetValue(assemName, out result)) {
+            result = new AssemblyRef(assemName);
+            asmRefDict[assemName] = result;
+          }
+          return result;
         }
 
         /// <summary>