Browse Source

Update cecil.

pull/728/merge
Daniel Grunwald 9 years ago
parent
commit
b3590ec292
  1. 5
      ICSharpCode.Decompiler/Disassembler/DisassemblerHelpers.cs
  2. 4
      ICSharpCode.Decompiler/Disassembler/MethodBodyDisassembler.cs
  3. 4
      ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs
  4. 5
      ICSharpCode.Decompiler/IL/ILReader.cs
  5. 3
      ICSharpCode.Decompiler/Tests/DecompilerTestBase.cs
  6. 26
      ICSharpCode.Decompiler/Tests/Helpers/Tester.cs
  7. 5
      ICSharpCode.Decompiler/Tests/Helpers/TypeSystemHelper.cs
  8. 5
      ICSharpCode.Decompiler/Tests/RoundtripAssembly.cs
  9. 13
      ICSharpCode.Decompiler/TypeSystem/CecilLoader.cs
  10. 2
      ILSpy.BamlDecompiler/CecilType.cs
  11. 5
      ILSpy/LoadedAssembly.cs
  12. 2
      ILSpy/TreeNodes/Analyzer/AnalyzedInterfaceEventImplementedByTreeNode.cs
  13. 2
      ILSpy/TreeNodes/Analyzer/AnalyzedInterfaceMethodImplementedByTreeNode.cs
  14. 2
      ILSpy/TreeNodes/Analyzer/AnalyzedInterfacePropertyImplementedByTreeNode.cs
  15. 2
      ILSpy/TreeNodes/Analyzer/AnalyzedTypeUsedByTreeNode.cs
  16. 4
      ILSpy/TreeNodes/BaseTypesTreeNode.cs
  17. 4
      ILSpy/TreeNodes/DerivedTypesTreeNode.cs
  18. 2
      cecil

5
ICSharpCode.Decompiler/Disassembler/DisassemblerHelpers.cs

@ -337,10 +337,7 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -337,10 +337,7 @@ namespace ICSharpCode.Decompiler.Disassembler
VariableReference variableRef = operand as VariableReference;
if (variableRef != null) {
if (string.IsNullOrEmpty(variableRef.Name))
writer.WriteReference(variableRef.Index.ToString(), variableRef);
else
writer.WriteReference(Escape(variableRef.Name), variableRef);
writer.WriteReference(variableRef.Index.ToString(), variableRef);
return;
}

4
ICSharpCode.Decompiler/Disassembler/MethodBodyDisassembler.cs

@ -92,10 +92,6 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -92,10 +92,6 @@ namespace ICSharpCode.Decompiler.Disassembler
foreach (var v in body.Variables) {
output.WriteDefinition("[" + v.Index + "] ", v);
v.VariableType.WriteTo(output);
if (!string.IsNullOrEmpty(v.Name)) {
output.Write(' ');
output.Write(DisassemblerHelpers.Escape(v.Name));
}
if (v.Index + 1 < body.Variables.Count)
output.Write(',');
output.WriteLine();

4
ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs

@ -851,7 +851,9 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -851,7 +851,9 @@ namespace ICSharpCode.Decompiler.Disassembler
output.Write("implements ");
else
output.Write(" ");
type.Interfaces[index].WriteTo(output, ILNameSyntax.TypeName);
var iface = type.Interfaces[index];
WriteAttributes(iface.CustomAttributes);
iface.InterfaceType.WriteTo(output, ILNameSyntax.TypeName);
}
output.WriteLine();
output.Unindent();

5
ICSharpCode.Decompiler/IL/ILReader.cs

@ -122,10 +122,7 @@ namespace ICSharpCode.Decompiler.IL @@ -122,10 +122,7 @@ namespace ICSharpCode.Decompiler.IL
{
VariableKind kind = v.IsPinned ? VariableKind.PinnedLocal : VariableKind.Local;
ILVariable ilVar = new ILVariable(kind, typeSystem.Resolve(v.VariableType), v.Index);
if (string.IsNullOrEmpty(v.Name))
ilVar.Name = "V_" + v.Index;
else
ilVar.Name = v.Name;
ilVar.Name = "V_" + v.Index;
return ilVar;
}

3
ICSharpCode.Decompiler/Tests/DecompilerTestBase.cs

@ -78,7 +78,8 @@ namespace ICSharpCode.Decompiler.Tests @@ -78,7 +78,8 @@ namespace ICSharpCode.Decompiler.Tests
}
throw new Exception(b.ToString());
}
return AssemblyDefinition.ReadAssembly(results.PathToAssembly);
return AssemblyDefinition.ReadAssembly(results.PathToAssembly,
new ReaderParameters { InMemory = true });
}
finally
{

26
ICSharpCode.Decompiler/Tests/Helpers/Tester.cs

@ -206,20 +206,22 @@ namespace ICSharpCode.Decompiler.Tests.Helpers @@ -206,20 +206,22 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
public static string DecompileCSharp(string assemblyFileName)
{
var typeSystem = new DecompilerTypeSystem(ModuleDefinition.ReadModule(assemblyFileName));
CSharpDecompiler decompiler = new CSharpDecompiler(typeSystem, new DecompilerSettings());
decompiler.AstTransforms.Insert(0, new RemoveCompilerAttribute());
decompiler.AstTransforms.Add(new EscapeInvalidIdentifiers());
var syntaxTree = decompiler.DecompileWholeModuleAsSingleFile();
StringWriter output = new StringWriter();
var visitor = new CSharpOutputVisitor(output, FormattingOptionsFactory.CreateSharpDevelop());
syntaxTree.AcceptVisitor(visitor);
using (var module = ModuleDefinition.ReadModule(assemblyFileName)) {
var typeSystem = new DecompilerTypeSystem(module);
CSharpDecompiler decompiler = new CSharpDecompiler(typeSystem, new DecompilerSettings());
decompiler.AstTransforms.Insert(0, new RemoveCompilerAttribute());
decompiler.AstTransforms.Add(new EscapeInvalidIdentifiers());
var syntaxTree = decompiler.DecompileWholeModuleAsSingleFile();
StringWriter output = new StringWriter();
var visitor = new CSharpOutputVisitor(output, FormattingOptionsFactory.CreateSharpDevelop());
syntaxTree.AcceptVisitor(visitor);
string fileName = Path.GetTempFileName();
File.WriteAllText(fileName, output.ToString());
string fileName = Path.GetTempFileName();
File.WriteAllText(fileName, output.ToString());
return fileName;
return fileName;
}
}
public static void RunAndCompareOutput(string testFileName, string outputFile, string decompiledOutputFile, string decompiledCodeFile = null)

5
ICSharpCode.Decompiler/Tests/Helpers/TypeSystemHelper.cs

@ -31,8 +31,9 @@ namespace ICSharpCode.Decompiler.Tests.Helpers @@ -31,8 +31,9 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
{
static readonly Lazy<DecompilerTypeSystem> decompilerTypeSystem = new Lazy<DecompilerTypeSystem>(
delegate {
var module = ModuleDefinition.ReadModule(typeof(TypeSystem).Module.FullyQualifiedName);
return new DecompilerTypeSystem(module);
using (var module = ModuleDefinition.ReadModule(typeof(TypeSystem).Module.FullyQualifiedName)) {
return new DecompilerTypeSystem(module);
}
});
public static DecompilerTypeSystem Instance {

5
ICSharpCode.Decompiler/Tests/RoundtripAssembly.cs

@ -128,7 +128,10 @@ namespace ICSharpCode.Decompiler.Tests @@ -128,7 +128,10 @@ namespace ICSharpCode.Decompiler.Tests
Stopwatch w = Stopwatch.StartNew();
DefaultAssemblyResolver resolver = new DefaultAssemblyResolver();
resolver.AddSearchDirectory(inputDir);
var module = ModuleDefinition.ReadModule(file, new ReaderParameters { AssemblyResolver = resolver });
var module = ModuleDefinition.ReadModule(file, new ReaderParameters {
AssemblyResolver = resolver,
InMemory = true
});
var decompiler = new TestProjectDecompiler(inputDir);
// use a fixed GUID so that we can diff the output between different ILSpy runs without spurious changes
decompiler.ProjectGuid = Guid.Parse("{127C83E4-4587-4CF9-ADCA-799875F3DFE6}");

13
ICSharpCode.Decompiler/TypeSystem/CecilLoader.cs

@ -272,8 +272,9 @@ namespace ICSharpCode.Decompiler.TypeSystem @@ -272,8 +272,9 @@ namespace ICSharpCode.Decompiler.TypeSystem
if (fileName == null)
throw new ArgumentNullException("fileName");
var param = new ReaderParameters { AssemblyResolver = new DummyAssemblyResolver() };
ModuleDefinition module = ModuleDefinition.ReadModule(fileName, param);
return LoadModule(module);
using (ModuleDefinition module = ModuleDefinition.ReadModule(fileName, param)) {
return LoadModule(module);
}
}
// used to prevent Cecil from loading referenced assemblies
@ -298,6 +299,10 @@ namespace ICSharpCode.Decompiler.TypeSystem @@ -298,6 +299,10 @@ namespace ICSharpCode.Decompiler.TypeSystem
{
return null;
}
public void Dispose()
{
}
}
#endregion
@ -898,8 +903,8 @@ namespace ICSharpCode.Decompiler.TypeSystem @@ -898,8 +903,8 @@ namespace ICSharpCode.Decompiler.TypeSystem
baseTypes.Add(ReadTypeReference(typeDefinition.BaseType));
}
if (typeDefinition.HasInterfaces) {
foreach (TypeReference iface in typeDefinition.Interfaces) {
baseTypes.Add(ReadTypeReference(iface));
foreach (var iface in typeDefinition.Interfaces) {
baseTypes.Add(ReadTypeReference(iface.InterfaceType));
}
}
}

2
ILSpy.BamlDecompiler/CecilType.cs

@ -43,7 +43,7 @@ namespace ILSpy.BamlDecompiler @@ -43,7 +43,7 @@ namespace ILSpy.BamlDecompiler
if (t == ct.type)
return true;
foreach (var @interface in t.Interfaces) {
var resolved = @interface.Resolve();
var resolved = @interface.InterfaceType.Resolve();
if (resolved == ct.type)
return true;
}

5
ILSpy/LoadedAssembly.cs

@ -113,6 +113,7 @@ namespace ICSharpCode.ILSpy @@ -113,6 +113,7 @@ namespace ICSharpCode.ILSpy
// runs on background thread
ReaderParameters p = new ReaderParameters();
p.AssemblyResolver = new MyAssemblyResolver(this);
p.InMemory = true;
if (stream != null)
{
@ -207,6 +208,10 @@ namespace ICSharpCode.ILSpy @@ -207,6 +208,10 @@ namespace ICSharpCode.ILSpy
var node = parent.LookupReferencedAssembly(fullName);
return node != null ? node.AssemblyDefinition : null;
}
public void Dispose()
{
}
}
public IAssemblyResolver GetAssemblyResolver()

2
ILSpy/TreeNodes/Analyzer/AnalyzedInterfaceEventImplementedByTreeNode.cs

@ -56,7 +56,7 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer @@ -56,7 +56,7 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer
{
if (!type.HasInterfaces)
yield break;
TypeReference implementedInterfaceRef = type.Interfaces.FirstOrDefault(i => i.Resolve() == analyzedMethod.DeclaringType);
TypeReference implementedInterfaceRef = type.Interfaces.FirstOrDefault(i => i.InterfaceType.Resolve() == analyzedMethod.DeclaringType)?.InterfaceType;
if (implementedInterfaceRef == null)
yield break;

2
ILSpy/TreeNodes/Analyzer/AnalyzedInterfaceMethodImplementedByTreeNode.cs

@ -52,7 +52,7 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer @@ -52,7 +52,7 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer
{
if (!type.HasInterfaces)
yield break;
TypeReference implementedInterfaceRef = type.Interfaces.FirstOrDefault(i => i.Resolve() == analyzedMethod.DeclaringType);
TypeReference implementedInterfaceRef = type.Interfaces.FirstOrDefault(i => i.InterfaceType.Resolve() == analyzedMethod.DeclaringType)?.InterfaceType;
if (implementedInterfaceRef == null)
yield break;

2
ILSpy/TreeNodes/Analyzer/AnalyzedInterfacePropertyImplementedByTreeNode.cs

@ -54,7 +54,7 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer @@ -54,7 +54,7 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer
{
if (!type.HasInterfaces)
yield break;
TypeReference implementedInterfaceRef = type.Interfaces.FirstOrDefault(i => i.Resolve() == analyzedMethod.DeclaringType);
TypeReference implementedInterfaceRef = type.Interfaces.FirstOrDefault(i => i.InterfaceType.Resolve() == analyzedMethod.DeclaringType)?.InterfaceType;
if (implementedInterfaceRef == null)
yield break;

2
ILSpy/TreeNodes/Analyzer/AnalyzedTypeUsedByTreeNode.cs

@ -93,7 +93,7 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer @@ -93,7 +93,7 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer
{
return IsUsedInTypeReference(type)
|| TypeMatches(type.BaseType)
|| IsUsedInTypeReferences(type.Interfaces);
|| IsUsedInTypeReferences(type.Interfaces.Select(i => i.InterfaceType));
}
private bool IsUsedInFieldReference(FieldReference field)

4
ILSpy/TreeNodes/BaseTypesTreeNode.cs

@ -56,8 +56,8 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -56,8 +56,8 @@ namespace ICSharpCode.ILSpy.TreeNodes
{
if (type.BaseType != null)
children.Add(new BaseTypesEntryNode(type.BaseType, false));
foreach (TypeReference i in type.Interfaces) {
children.Add(new BaseTypesEntryNode(i, true));
foreach (var i in type.Interfaces) {
children.Add(new BaseTypesEntryNode(i.InterfaceType, true));
}
}

4
ILSpy/TreeNodes/DerivedTypesTreeNode.cs

@ -70,8 +70,8 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -70,8 +70,8 @@ namespace ICSharpCode.ILSpy.TreeNodes
foreach (TypeDefinition td in TreeTraversal.PreOrder(module.Types, t => t.NestedTypes)) {
cancellationToken.ThrowIfCancellationRequested();
if (type.IsInterface && td.HasInterfaces) {
foreach (TypeReference typeRef in td.Interfaces) {
if (IsSameType(typeRef, type))
foreach (var iface in td.Interfaces) {
if (IsSameType(iface.InterfaceType, type))
yield return new DerivedTypesEntryNode(td, assemblies);
}
} else if (!type.IsInterface && td.BaseType != null && IsSameType(td.BaseType, type)) {

2
cecil

@ -1 +1 @@ @@ -1 +1 @@
Subproject commit 53df0bc39e48d8544020856e83f8d8a2e11c8a3a
Subproject commit 8a3eedc7ff08fd30484da5874d1e18db9f3ff7ab
Loading…
Cancel
Save