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