Author: jbevain
Date: 2005-04-29 17:12:06 -0400 (Fri, 29 Apr 2005)
New Revision: 43806

Added:
   trunk/cecil/lib/Mono.Cecil.Implem/AssemblyLinkedResource.cs
   trunk/cecil/lib/Mono.Cecil/IAssemblyLinkedResource.cs
Modified:
   trunk/cecil/lib/Mono.Cecil.Implem/StructureReader.cs
   trunk/cecil/lib/Mono.Cecil.Implem/StructureWriter.cs
   trunk/cecil/lib/Mono.Cecil.dll.sources
   trunk/cecil/lib/Mono.Cecil/IEmbeddedResource.cs
   trunk/cecil/lib/Mono.Cecil/ILinkedResource.cs
   trunk/cecil/lib/Mono.Cecil/IReflectionStructureVisitor.cs
Log:
add support for resources defined in other assemblies

Added: trunk/cecil/lib/Mono.Cecil/IAssemblyLinkedResource.cs
===================================================================
--- trunk/cecil/lib/Mono.Cecil/IAssemblyLinkedResource.cs       2005-04-29 
20:33:45 UTC (rev 43805)
+++ trunk/cecil/lib/Mono.Cecil/IAssemblyLinkedResource.cs       2005-04-29 
21:12:06 UTC (rev 43806)
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2004 DotNetGuru and the individuals listed
+ * on the ChangeLog entries.
+ *
+ * Authors :
+ *   Jb Evain   ([EMAIL PROTECTED])
+ *
+ * This is a free software distributed under a MIT/X11 license
+ * See LICENSE.MIT file for more details
+ *
+ *****************************************************************************/
+
+namespace Mono.Cecil {
+
+    public interface IAssemblyLinkedResource : IResource {
+
+        IAssemblyNameReference Assembly { get; set; }
+    }
+}

Modified: trunk/cecil/lib/Mono.Cecil/IEmbeddedResource.cs
===================================================================
--- trunk/cecil/lib/Mono.Cecil/IEmbeddedResource.cs     2005-04-29 20:33:45 UTC 
(rev 43805)
+++ trunk/cecil/lib/Mono.Cecil/IEmbeddedResource.cs     2005-04-29 21:12:06 UTC 
(rev 43806)
@@ -17,4 +17,3 @@
         byte [] Data { get; set; }
     }
 }
-

Modified: trunk/cecil/lib/Mono.Cecil/ILinkedResource.cs
===================================================================
--- trunk/cecil/lib/Mono.Cecil/ILinkedResource.cs       2005-04-29 20:33:45 UTC 
(rev 43805)
+++ trunk/cecil/lib/Mono.Cecil/ILinkedResource.cs       2005-04-29 21:12:06 UTC 
(rev 43806)
@@ -18,4 +18,3 @@
         string File { get; set; }
     }
 }
-

Modified: trunk/cecil/lib/Mono.Cecil/IReflectionStructureVisitor.cs
===================================================================
--- trunk/cecil/lib/Mono.Cecil/IReflectionStructureVisitor.cs   2005-04-29 
20:33:45 UTC (rev 43805)
+++ trunk/cecil/lib/Mono.Cecil/IReflectionStructureVisitor.cs   2005-04-29 
21:12:06 UTC (rev 43806)
@@ -21,6 +21,7 @@
         void Visit (IResourceCollection resources);
         void Visit (IEmbeddedResource res);
         void Visit (ILinkedResource res);
+        void Visit (IAssemblyLinkedResource res);
         void Visit (IModuleDefinition module);
         void Visit (IModuleDefinitionCollection modules);
         void Visit (IModuleReference module);

Added: trunk/cecil/lib/Mono.Cecil.Implem/AssemblyLinkedResource.cs
===================================================================
--- trunk/cecil/lib/Mono.Cecil.Implem/AssemblyLinkedResource.cs 2005-04-29 
20:33:45 UTC (rev 43805)
+++ trunk/cecil/lib/Mono.Cecil.Implem/AssemblyLinkedResource.cs 2005-04-29 
21:12:06 UTC (rev 43806)
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2004 DotNetGuru and the individuals listed
+ * on the ChangeLog entries.
+ *
+ * Authors :
+ *   Jb Evain   ([EMAIL PROTECTED])
+ *
+ * This is a free software distributed under a MIT/X11 license
+ * See LICENSE.MIT file for more details
+ *
+ *****************************************************************************/
+
+namespace Mono.Cecil.Implem {
+
+    using Mono.Cecil;
+    using Mono.Cecil.Metadata;
+
+    internal sealed class AssemblyLinkedResource : Resource, 
IAssemblyLinkedResource {
+
+        private IAssemblyNameReference m_asmRef;
+
+        public IAssemblyNameReference Assembly {
+            get { return m_asmRef; }
+            set { m_asmRef = value; }
+        }
+
+        public AssemblyLinkedResource (string name, ManifestResourceAttributes 
attributes,
+                                       ModuleDefinition owner, 
AssemblyNameReference asmRef) :
+            base (name, attributes, owner)
+        {
+            m_asmRef = asmRef;
+        }
+
+        public override void Accept (IReflectionStructureVisitor visitor)
+        {
+            visitor.Visit (this);
+        }
+    }
+}
+

Modified: trunk/cecil/lib/Mono.Cecil.Implem/StructureReader.cs
===================================================================
--- trunk/cecil/lib/Mono.Cecil.Implem/StructureReader.cs        2005-04-29 
20:33:45 UTC (rev 43805)
+++ trunk/cecil/lib/Mono.Cecil.Implem/StructureReader.cs        2005-04-29 
21:12:06 UTC (rev 43806)
@@ -25,6 +25,7 @@
         private Image m_img;
         private AssemblyDefinition m_asmDef;
         private ModuleDefinition m_module;
+        private TablesHeap m_tHeap;
 
         public ImageReader ImageReader {
             get { return m_ir; }
@@ -38,19 +39,20 @@
         {
             m_ir = ir;
             m_img = ir.Image;
+            m_tHeap = m_img.MetadataRoot.Streams.TablesHeap;
         }
 
         public void Visit (IAssemblyDefinition asm)
         {
             m_asmDef = asm as AssemblyDefinition;
-            AssemblyTable atable = m_img.MetadataRoot.Streams.TablesHeap 
[typeof(AssemblyTable)] as AssemblyTable;
+            AssemblyTable atable = m_tHeap [typeof(AssemblyTable)] as 
AssemblyTable;
             if (atable == null || atable.Rows == null || atable.Rows [0] == 
null)
                 throw new ReflectionException ("Can not create an 
AssemblyDefinition");
         }
 
         public void Visit (IAssemblyNameDefinition name)
         {
-            AssemblyTable atable = m_img.MetadataRoot.Streams.TablesHeap 
[typeof(AssemblyTable)] as AssemblyTable;
+            AssemblyTable atable = m_tHeap [typeof(AssemblyTable)] as 
AssemblyTable;
             AssemblyRow arow = atable [0];
             name.Name = m_img.MetadataRoot.Streams.StringsHeap [arow.Name];
             if (arow.PublicKey != 0)
@@ -65,7 +67,7 @@
 
         public void Visit (IAssemblyNameReferenceCollection names)
         {
-            AssemblyRefTable aref = m_img.MetadataRoot.Streams.TablesHeap 
[typeof(AssemblyRefTable)] as AssemblyRefTable;
+            AssemblyRefTable aref = m_tHeap [typeof(AssemblyRefTable)] as 
AssemblyRefTable;
             if (aref != null && aref.Rows.Count > 0) {
                 foreach (AssemblyRefRow arefrow in aref.Rows) {
                     AssemblyNameReference aname = new AssemblyNameReference (
@@ -86,13 +88,13 @@
 
         public void Visit (IResourceCollection resources)
         {
-            if (!m_img.MetadataRoot.Streams.TablesHeap.HasTable (typeof 
(ManifestResourceTable)))
+            if (!m_tHeap.HasTable (typeof (ManifestResourceTable)))
                 return;
 
             ModuleDefinition module = resources.Container as ModuleDefinition;
 
-            ManifestResourceTable mrTable = 
m_img.MetadataRoot.Streams.TablesHeap [typeof(ManifestResourceTable)] as 
ManifestResourceTable;
-            FileTable fTable = m_img.MetadataRoot.Streams.TablesHeap 
[typeof(FileTable)] as FileTable;
+            ManifestResourceTable mrTable = m_tHeap 
[typeof(ManifestResourceTable)] as ManifestResourceTable;
+            FileTable fTable = m_tHeap [typeof(FileTable)] as FileTable;
 
             BinaryReader br = m_ir.GetReader ();
 
@@ -121,7 +123,10 @@
                     (resources as ResourceCollection) [lres.Name] = lres;
                     break;
                 case TokenType.AssemblyRef :
-                    // not sure how to implement this
+                    AssemblyNameReference asm = m_module.AssemblyReferences 
[(int) mrRow.Implementation.RID - 1] as AssemblyNameReference;
+                    AssemblyLinkedResource alr = new AssemblyLinkedResource 
(m_img.MetadataRoot.Streams.StringsHeap [mrRow.Name], mrRow.Flags,
+                                                                             
module, asm);
+                    (resources as ResourceCollection) [alr.Name] = alr;
                     break;
                 }
             }
@@ -135,13 +140,17 @@
         {
         }
 
+        public void Visit (IAssemblyLinkedResource res)
+        {
+        }
+
         public void Visit (IModuleDefinition module)
         {
         }
 
         public void Visit (IModuleDefinitionCollection modules)
         {
-            ModuleTable mt = m_img.MetadataRoot.Streams.TablesHeap 
[typeof(ModuleTable)] as ModuleTable;
+            ModuleTable mt = m_tHeap [typeof(ModuleTable)] as ModuleTable;
             if (mt == null || mt.Rows.Count != 1)
                 throw new ReflectionException ("Can not read main module");
 
@@ -153,7 +162,7 @@
             mods.Add (main);
             m_module = main;
 
-            FileTable ftable = m_img.MetadataRoot.Streams.TablesHeap 
[typeof(FileTable)] as FileTable;
+            FileTable ftable = m_tHeap [typeof(FileTable)] as FileTable;
             if (ftable != null && ftable.Rows.Count > 0) {
                 foreach (FileRow frow in ftable.Rows) {
                     if (frow.Flags == 
Mono.Cecil.FileAttributes.ContainsMetaData) {
@@ -190,7 +199,7 @@
         public void Visit (IModuleReferenceCollection modules)
         {
             ModuleDefinition mod = modules.Container as ModuleDefinition;
-            ModuleRefTable mrt = 
mod.Reader.Image.MetadataRoot.Streams.TablesHeap [typeof(ModuleRefTable)] as 
ModuleRefTable;
+            ModuleRefTable mrt = m_tHeap [typeof(ModuleRefTable)] as 
ModuleRefTable;
             if (mrt != null && mrt.Rows.Count > 0)
                 foreach (ModuleRefRow mrr in mrt.Rows)
                     (modules as ModuleReferenceCollection).Add (new 
ModuleReference (m_img.MetadataRoot.Streams.StringsHeap [mrr.Name]));

Modified: trunk/cecil/lib/Mono.Cecil.Implem/StructureWriter.cs
===================================================================
--- trunk/cecil/lib/Mono.Cecil.Implem/StructureWriter.cs        2005-04-29 
20:33:45 UTC (rev 43805)
+++ trunk/cecil/lib/Mono.Cecil.Implem/StructureWriter.cs        2005-04-29 
21:12:06 UTC (rev 43806)
@@ -71,6 +71,11 @@
             // TODO
         }
 
+        public void Visit (IAssemblyLinkedResource res)
+        {
+            // TODO
+        }
+
         public void Visit (IModuleDefinition module)
         {
             // TODO

Modified: trunk/cecil/lib/Mono.Cecil.dll.sources
===================================================================
--- trunk/cecil/lib/Mono.Cecil.dll.sources      2005-04-29 20:33:45 UTC (rev 
43805)
+++ trunk/cecil/lib/Mono.Cecil.dll.sources      2005-04-29 21:12:06 UTC (rev 
43806)
@@ -10,6 +10,7 @@
 ./Mono.Cecil/IArrayDimensionCollection.cs
 ./Mono.Cecil/IArrayType.cs
 ./Mono.Cecil/IAssemblyDefinition.cs
+./Mono.Cecil/IAssemblyLinkedResource.cs
 ./Mono.Cecil/IAssemblyName.cs
 ./Mono.Cecil/IAssemblyNameReferenceCollection.cs
 ./Mono.Cecil/IClassLayoutInfo.cs
@@ -183,6 +184,7 @@
 ./Mono.Cecil.Implem/ArrayDimensionCollection.cs
 ./Mono.Cecil.Implem/ArrayType.cs
 ./Mono.Cecil.Implem/AssemblyDefinition.cs
+./Mono.Cecil.Implem/AssemblyLinkedResource.cs
 ./Mono.Cecil.Implem/AssemblyName.cs
 ./Mono.Cecil.Implem/AssemblyNameReferenceCollection.cs
 ./Mono.Cecil.Implem/CodeReader.cs

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to