Moved back to Cecil version 0.6.*
authorChris Bacon <chrisbacon76@gmail.com>
Thu, 12 Aug 2010 18:47:09 +0000 (19:47 +0100)
committerChris Bacon <chrisbacon76@gmail.com>
Thu, 12 Aug 2010 18:47:09 +0000 (19:47 +0100)
PDB files are not supported any more.
Symbol writing is not supported.

mcs/class/Mono.Cecil/Mono.Cecil.Metadata/MetadataWriter.cs
mcs/class/Mono.CodeContracts/Makefile
mcs/class/Mono.CodeContracts/Mono.CodeContracts.Rewrite.Ast/ExprCall.cs
mcs/class/Mono.CodeContracts/Mono.CodeContracts.Rewrite.AstVisitors/CompileVisitor.cs
mcs/class/Mono.CodeContracts/Mono.CodeContracts.Rewrite/ContractsRuntime.cs
mcs/class/Mono.CodeContracts/Mono.CodeContracts.Rewrite/Decompile.cs
mcs/class/Mono.CodeContracts/Mono.CodeContracts.Rewrite/ExprGen.cs
mcs/class/Mono.CodeContracts/Mono.CodeContracts.Rewrite/MethodInfo.cs
mcs/class/Mono.CodeContracts/Mono.CodeContracts.Rewrite/PerformRewrite.cs
mcs/class/Mono.CodeContracts/Mono.CodeContracts.Rewrite/Rewriter.cs
mcs/class/Mono.CodeContracts/Mono.CodeContracts.Rewrite/TransformContractsVisitor.cs

index 93354565a9156f9d416c287850fd2642f801cd22..53cb186398aa970cbf2a8e32bbc15fe02b1f4fea 100644 (file)
@@ -367,7 +367,7 @@ namespace Mono.Cecil.Metadata {
                                m_root.Header.Version = "v2.0.50727";
                                break;
                        case TargetRuntime.NET_4_0 :
-                               m_root.Header.Version = "v4.0.21006";
+                               m_root.Header.Version = "v4.0.30319";
                                break;
                        }
 
index c34032344f2486c8badc12475f273fa690de745a..b9ccfb06fdf65c24181694e4da138f660075e90f 100644 (file)
@@ -4,6 +4,7 @@ include ../../build/rules.make
 
 LIBRARY = Mono.CodeContracts.dll
 
-LIB_MCS_FLAGS = -r:System -r:System.Core -r:./Mono.Cecil.dll -r:./Mono.Cecil.Mdb.dll -r:./Mono.Cecil.Pdb.dll
+LIB_MCS_FLAGS = -r:System -r:System.Core -r:Mono.Cecil.dll -r:Mono.Cecil.Mdb.dll 
+#-r:Mono.Cecil.Pdb.dll
 
 include ../../build/library.make
index 35e43a1c49c3d85eb84b0650fbf57a85184572f2..e479dad29b316656a9605d7fa041d2706b368527 100644 (file)
@@ -50,7 +50,7 @@ namespace Mono.CodeContracts.Rewrite.Ast {
                }\r
 \r
                public override TypeReference ReturnType {\r
-                       get { return this.Method.ReturnType; }\r
+                       get { return this.Method.ReturnType.ReturnType; }\r
                }\r
 \r
        }\r
index 384c25bb23ce277d6ef60bbd39cd1b338f653871..1fafb654a4f741676bf24d148b75fb480f45f485 100644 (file)
@@ -36,19 +36,19 @@ using Mono.CodeContracts.Rewrite.Ast;
 namespace Mono.CodeContracts.Rewrite.AstVisitors {\r
        class CompileVisitor : ExprVisitor {\r
 \r
-               public CompileVisitor (ILProcessor il, Dictionary<Expr, Instruction> instructionLookup)\r
+               public CompileVisitor (CilWorker il, Dictionary<Expr, Instruction> instructionLookup)\r
                        : this (il, instructionLookup, il.Append)\r
                {\r
                }\r
 \r
-               public CompileVisitor (ILProcessor il, Dictionary<Expr, Instruction> instructionLookup, Action<Instruction> fnEmit)\r
+               public CompileVisitor (CilWorker il, Dictionary<Expr, Instruction> instructionLookup, Action<Instruction> fnEmit)\r
                {\r
                        this.il = il;\r
                        this.instructionLookup = instructionLookup;\r
                        this.fnEmit = fnEmit;\r
                }\r
 \r
-               private ILProcessor il;\r
+               private CilWorker il;\r
                private Dictionary<Expr, Instruction> instructionLookup;\r
                private Action<Instruction> fnEmit;\r
 \r
index 00f0e99112da2c8944d6423b0a100965e054de1a..743ae9c1e8decce085e2745e973ee774352d45c4 100644 (file)
@@ -70,8 +70,8 @@ namespace Mono.CodeContracts.Rewrite {
                                \r
                                // Create type\r
                                TypeReference typeObject = this.module.Import (typeof (object));\r
-                               TypeDefinition type = new TypeDefinition (Namespace, "__ContractsRuntime",\r
-                                       TypeAttributes.Abstract | TypeAttributes.Sealed | TypeAttributes.NotPublic | TypeAttributes.AnsiClass | TypeAttributes.AutoClass,\r
+                               TypeDefinition type = new TypeDefinition ("__ContractsRuntime", Namespace,\r
+                                       TypeAttributes.Abstract | TypeAttributes.Sealed | TypeAttributes.NotPublic | TypeAttributes.AnsiClass | TypeAttributes.AutoClass, // | TypeAttributes.BeforeFieldInit,\r
                                        typeObject);\r
                                this.module.Types.Add (type);\r
                                // Attach custom attributes\r
@@ -100,18 +100,19 @@ namespace Mono.CodeContracts.Rewrite {
                                TypeReference typeString = this.module.Import (typeof (string));\r
                                TypeReference typeException = this.module.Import (typeof (Exception));\r
                                // Create type\r
-                               TypeDefinition type = new TypeDefinition ("", "ContractException",\r
+                               TypeDefinition type = new TypeDefinition ("ContractException", Namespace,\r
                                        TypeAttributes.NestedPrivate | TypeAttributes.AnsiClass | TypeAttributes.AutoClass, typeException);\r
-                               this.typeContractsRuntime.NestedTypes.Add (type);\r
+                               //this.typeContractsRuntime.NestedTypes.Add (type);\r
+                               this.module.Types.Add(type);\r
                                // Create constructor\r
                                MethodDefinition cons = new MethodDefinition (".ctor",\r
                                        MethodAttributes.Assem | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName, typeVoid);\r
-                               cons.Parameters.Add (new ParameterDefinition ("kind", ParameterAttributes.None, typeContractFailureKind));\r
-                               cons.Parameters.Add (new ParameterDefinition ("failure", ParameterAttributes.None, typeString));\r
-                               cons.Parameters.Add (new ParameterDefinition ("usermsg", ParameterAttributes.None, typeString));\r
-                               cons.Parameters.Add (new ParameterDefinition ("condition", ParameterAttributes.None, typeString));\r
-                               cons.Parameters.Add (new ParameterDefinition ("inner", ParameterAttributes.None, typeException));\r
-                               var il = cons.Body.GetILProcessor ();\r
+                               cons.Parameters.Add (new ParameterDefinition ("kind", 1, ParameterAttributes.None, typeContractFailureKind));\r
+                               cons.Parameters.Add (new ParameterDefinition ("failure", 2, ParameterAttributes.None, typeString));\r
+                               cons.Parameters.Add (new ParameterDefinition ("usermsg", 3, ParameterAttributes.None, typeString));\r
+                               cons.Parameters.Add (new ParameterDefinition ("condition", 4, ParameterAttributes.None, typeString));\r
+                               cons.Parameters.Add (new ParameterDefinition ("inner", 5, ParameterAttributes.None, typeException));\r
+                               var il = cons.Body.CilWorker;\r
                                il.Emit (OpCodes.Ldarg_0);\r
                                il.Emit (OpCodes.Ldarg_2);\r
                                il.Emit (OpCodes.Ldarg_S, cons.Parameters [4]);\r
@@ -152,12 +153,12 @@ namespace Mono.CodeContracts.Rewrite {
                                // Create method\r
                                MethodDefinition method = new MethodDefinition ("TriggerFailure",\r
                                        MethodAttributes.Assem | MethodAttributes.Static, typeVoid);\r
-                               method.Parameters.Add (new ParameterDefinition ("kind", ParameterAttributes.None, typeContractFailureKind));\r
-                               method.Parameters.Add (new ParameterDefinition ("message", ParameterAttributes.None, typeString));\r
-                               method.Parameters.Add (new ParameterDefinition ("userMessage", ParameterAttributes.None, typeString));\r
-                               method.Parameters.Add (new ParameterDefinition ("conditionText", ParameterAttributes.None, typeString));\r
-                               method.Parameters.Add (new ParameterDefinition ("inner", ParameterAttributes.None, typeException));\r
-                               var il = method.Body.GetILProcessor ();\r
+                               method.Parameters.Add (new ParameterDefinition ("kind", 1, ParameterAttributes.None, typeContractFailureKind));\r
+                               method.Parameters.Add (new ParameterDefinition ("message", 2, ParameterAttributes.None, typeString));\r
+                               method.Parameters.Add (new ParameterDefinition ("userMessage", 3, ParameterAttributes.None, typeString));\r
+                               method.Parameters.Add (new ParameterDefinition ("conditionText", 4, ParameterAttributes.None, typeString));\r
+                               method.Parameters.Add (new ParameterDefinition ("inner", 5, ParameterAttributes.None, typeException));\r
+                               var il = method.Body.CilWorker;\r
                                if (this.options.ThrowOnFailure) {\r
                                        il.Emit (OpCodes.Ldarg_0);\r
                                        il.Emit (OpCodes.Ldarg_1);\r
@@ -199,13 +200,14 @@ namespace Mono.CodeContracts.Rewrite {
                                // Create method\r
                                MethodDefinition method = new MethodDefinition ("ReportFailure",\r
                                        MethodAttributes.Assem | MethodAttributes.Static, typeVoid);\r
-                               method.Parameters.Add (new ParameterDefinition ("kind", ParameterAttributes.None, typeContractFailureKind));\r
-                               method.Parameters.Add (new ParameterDefinition ("message", ParameterAttributes.None, typeString));\r
-                               method.Parameters.Add (new ParameterDefinition ("conditionText", ParameterAttributes.None, typeString));\r
-                               method.Parameters.Add (new ParameterDefinition ("inner", ParameterAttributes.None, typeException));\r
-                               VariableDefinition vMsg = new VariableDefinition ("msg", typeString);\r
+                               method.Parameters.Add (new ParameterDefinition ("kind", 1, ParameterAttributes.None, typeContractFailureKind));\r
+                               method.Parameters.Add (new ParameterDefinition ("message", 2, ParameterAttributes.None, typeString));\r
+                               method.Parameters.Add (new ParameterDefinition ("conditionText", 3, ParameterAttributes.None, typeString));\r
+                               method.Parameters.Add (new ParameterDefinition ("inner", 4, ParameterAttributes.None, typeException));\r
+                               VariableDefinition vMsg = new VariableDefinition ("sMsg", 0, method, typeString);\r
                                method.Body.Variables.Add (vMsg);\r
-                               var il = method.Body.GetILProcessor ();\r
+                               method.Body.InitLocals = true;\r
+                               var il = method.Body.CilWorker;\r
                                il.Emit (OpCodes.Ldarg_0);\r
                                il.Emit (OpCodes.Ldarg_1);\r
                                il.Emit (OpCodes.Ldarg_2);\r
@@ -255,10 +257,10 @@ namespace Mono.CodeContracts.Rewrite {
                                // Create method\r
                                MethodDefinition method = new MethodDefinition ("Requires",\r
                                    MethodAttributes.Assem | MethodAttributes.Static, typeVoid);\r
-                               method.Parameters.Add (new ParameterDefinition ("condition", ParameterAttributes.None, typeBoolean));\r
-                               method.Parameters.Add (new ParameterDefinition ("message", ParameterAttributes.None, typeString));\r
-                               method.Parameters.Add (new ParameterDefinition ("conditionText", ParameterAttributes.None, typeString));\r
-                               var il = method.Body.GetILProcessor ();\r
+                               method.Parameters.Add (new ParameterDefinition ("condition", 1, ParameterAttributes.None, typeBoolean));\r
+                               method.Parameters.Add (new ParameterDefinition ("message", 2, ParameterAttributes.None, typeString));\r
+                               method.Parameters.Add (new ParameterDefinition ("conditionText", 3, ParameterAttributes.None, typeString));\r
+                               var il = method.Body.CilWorker;\r
                                il.Emit (OpCodes.Ldarg_0);\r
                                var instRet = il.Create(OpCodes.Ret);\r
                                il.Emit (OpCodes.Brtrue_S, instRet);\r
index 6d3dde29a22baa44a219db8a8187de831fa7bc75..31e42300fcd3181d328237368c27e66e713a98f0 100644 (file)
@@ -38,12 +38,12 @@ namespace Mono.CodeContracts.Rewrite {
 \r
        class Decompile {\r
 \r
-               public Decompile (MethodDefinition method)\r
+               public Decompile (ModuleDefinition module, MethodDefinition method)\r
                {\r
                        this.method = method;\r
                        this.exprs = new Stack<Expr> ();\r
                        this.Instructions = new Dictionary<Expr, Instruction> ();\r
-                       this.methodInfo = new MethodInfo (method);\r
+                       this.methodInfo = new MethodInfo (module, method);\r
                        this.gen = new ExprGen (this.methodInfo);\r
                }\r
 \r
@@ -58,7 +58,7 @@ namespace Mono.CodeContracts.Rewrite {
                {\r
                        Instruction unknownInst = null;\r
                        var insts = this.method.Body.Instructions;\r
-                       foreach (var inst in insts) {\r
+                       foreach (Instruction inst in insts) {\r
                                if (failQuietly) {\r
                                        if (unknownInst == null) {\r
                                                try {\r
index fa1d03ee5a0e3bc850f6c27147db691c864e1ac4..a9be199862d92c1952f85d8be463154596fb8b3a 100644 (file)
@@ -70,7 +70,7 @@ namespace Mono.CodeContracts.Rewrite {
 \r
                public ExprLoadArg LoadArg (ParameterDefinition parameterDefinition)\r
                {\r
-                       return this.LoadArg (parameterDefinition.Index);\r
+                       return this.LoadArg (parameterDefinition.Sequence);\r
                }\r
 \r
                public ExprLoadConstant LoadConstant (object value)\r
index 596fb7864f62a4e7e3f8603fde273245fd1b923f..67ab0d987726c61f695a5e2010847374bc18ba04 100644 (file)
@@ -35,10 +35,10 @@ using Mono.Cecil;
 namespace Mono.CodeContracts.Rewrite {\r
        class MethodInfo {\r
 \r
-               public MethodInfo (MethodDefinition method)\r
+               public MethodInfo (ModuleDefinition module, MethodDefinition method)\r
                {\r
                        this.Method = method;\r
-                       this.Module = method.Module;\r
+                       this.Module = module;\r
 \r
                        this.typeVoid = new Lazy<TypeReference> (() => this.Module.Import (typeof (void)));\r
                        this.typeObject = new Lazy<TypeReference> (() => this.Module.Import (typeof (object)));\r
index 14644e2f25f39ee54e92141775fb124265474359..e02cae865c671453b10527facec6708947f1efb4 100644 (file)
@@ -50,28 +50,28 @@ namespace Mono.CodeContracts.Rewrite {
 \r
                public void Rewrite (AssemblyDefinition assembly)\r
                {\r
-                       foreach (var module in assembly.Modules) {\r
+                       foreach (ModuleDefinition module in assembly.Modules) {\r
                                ContractsRuntime contractsRuntime = new ContractsRuntime(module, this.options);\r
 \r
                                var allMethods =\r
-                                       from type in module.Types\r
-                                       from method in type.Methods\r
+                                       from type in module.Types.Cast<TypeDefinition> ()\r
+                                       from method in type.Methods.Cast<MethodDefinition> ()\r
                                        select method;\r
 \r
-                               foreach (var method in allMethods.ToArray ()) {\r
-                                       this.RewriteMethod (method, contractsRuntime);\r
+                               foreach (MethodDefinition method in allMethods.ToArray ()) {\r
+                                       this.RewriteMethod (module, method, contractsRuntime);\r
                                }\r
                        }\r
                }\r
 \r
-               private void RewriteMethod (MethodDefinition method, ContractsRuntime contractsRuntime)\r
+               private void RewriteMethod (ModuleDefinition module, MethodDefinition method, ContractsRuntime contractsRuntime)\r
                {\r
                        if (this.rewrittenMethods.ContainsKey (method)) {\r
                                return;\r
                        }\r
                        var overridden = this.GetOverriddenMethod (method);\r
                        if (overridden != null) {\r
-                               this.RewriteMethod (overridden, contractsRuntime);\r
+                               this.RewriteMethod (module, overridden, contractsRuntime);\r
                        }\r
                        bool anyRewrites = false;\r
                        var baseMethod = this.GetBaseOverriddenMethod (method);\r
@@ -92,7 +92,7 @@ namespace Mono.CodeContracts.Rewrite {
 \r
                        TransformContractsVisitor vTransform = null;\r
                        if (method.HasBody) {\r
-                               vTransform = this.TransformContracts (method, contractsRuntime);\r
+                               vTransform = this.TransformContracts (module, method, contractsRuntime);\r
                                if (this.sym != null) {\r
                                        this.sym.Write (method.Body);\r
                                }\r
@@ -103,17 +103,17 @@ namespace Mono.CodeContracts.Rewrite {
                        this.rewrittenMethods.Add (method, vTransform);\r
 \r
                        if (anyRewrites) {\r
-                               Console.WriteLine (method.FullName);\r
+                               Console.WriteLine (method);\r
                        }\r
                }\r
 \r
-               private TransformContractsVisitor TransformContracts (MethodDefinition method, ContractsRuntime contractsRuntime)\r
+               private TransformContractsVisitor TransformContracts (ModuleDefinition module, MethodDefinition method, ContractsRuntime contractsRuntime)\r
                {\r
                        var body = method.Body;\r
-                       Decompile decompile = new Decompile (method);\r
+                       Decompile decompile = new Decompile (module, method);\r
                        var decomp = decompile.Go ();\r
 \r
-                       TransformContractsVisitor vTransform = new TransformContractsVisitor (method, decompile.Instructions, contractsRuntime);\r
+                       TransformContractsVisitor vTransform = new TransformContractsVisitor (module, method, decompile.Instructions, contractsRuntime);\r
                        vTransform.Visit (decomp);\r
 \r
                        foreach (var replacement in vTransform.ContractRequiresInfo) {\r
@@ -127,7 +127,7 @@ namespace Mono.CodeContracts.Rewrite {
 \r
                private void RewriteIL (MethodBody body, Dictionary<Expr,Instruction> instructionLookup, Expr remove, Expr insert)\r
                {\r
-                       var il = body.GetILProcessor ();\r
+                       var il = body.CilWorker;\r
                        Instruction instInsertBefore;\r
                        if (remove != null) {\r
                                var vInstExtent = new InstructionExtentVisitor (instructionLookup);\r
@@ -154,7 +154,7 @@ namespace Mono.CodeContracts.Rewrite {
                        if (baseType == null) {\r
                                return null;\r
                        }\r
-                       var overridden = baseType.Resolve ().Methods.FirstOrDefault (x => x.Name == method.Name);\r
+                       var overridden = baseType.Resolve ().Methods.Cast<MethodDefinition> ().FirstOrDefault (x => x.Name == method.Name);\r
                        return overridden;\r
                }\r
 \r
index 74897a9f024b799994b5b092daaed7674a39d946..0b4a8bec2dfa481953ec7cf858ef486109173165 100644 (file)
@@ -33,6 +33,7 @@ using System.Text;
 using Mono.Cecil.Cil;\r
 using Mono.Cecil;\r
 using System.IO;\r
+using Mono.CompilerServices.SymbolWriter;\r
 \r
 namespace Mono.CodeContracts.Rewrite {\r
        public class Rewriter {\r
@@ -60,28 +61,29 @@ namespace Mono.CodeContracts.Rewrite {
                                this.warnings.Add ("-debug specified, but no symbol stream provided.");\r
                        } else {\r
                                try {\r
-                                       ISymbolReaderProvider symProv = new Mono.Cecil.Mdb.MdbReaderProvider ();\r
-                                       foreach (var module in assembly.Modules) {\r
-                                               ISymbolReader sym = this.options.Assembly.IsFilename ?\r
-                                                       symProv.GetSymbolReader (module, this.options.Assembly.Filename) :\r
-                                                       symProv.GetSymbolReader (module, this.options.Assembly.Streams.Symbols);\r
-                                               module.ReadSymbols (sym);\r
-                                               this.symReaders.Add (sym);\r
+                                       //ISymbolReaderProvider symProv = new Mono.Cecil.Mdb.MdbReaderProvider ();\r
+                                       foreach (ModuleDefinition module in assembly.Modules) {\r
+                                               //ISymbolReader sym = this.options.Assembly.IsFilename ?\r
+                                               //      symProv.GetSymbolReader (module, this.options.Assembly.Filename) :\r
+                                               //      symProv.GetSymbolReader (module, this.options.Assembly.Streams.Symbols);\r
+                                               //module.ReadSymbols (sym);\r
+                                               //this.symReaders.Add (sym);\r
+                                               module.LoadSymbols ();\r
                                        }\r
                                        this.usingMdb = true;\r
                                } catch {\r
-                                       try {\r
-                                               ISymbolReaderProvider symProv = new Mono.Cecil.Pdb.PdbReaderProvider ();\r
-                                               foreach (var module in assembly.Modules) {\r
-                                                       ISymbolReader sym = this.options.Assembly.IsFilename ?\r
-                                                               symProv.GetSymbolReader (module, this.options.Assembly.Filename) :\r
-                                                               symProv.GetSymbolReader (module, this.options.Assembly.Streams.Symbols);\r
-                                                       module.ReadSymbols (sym);\r
-                                                       this.symReaders.Add (sym);\r
-                                               }\r
-                                               this.usingPdb = true;\r
-                                       } catch {\r
-                                       }\r
+//                                     try {\r
+//                                             ISymbolReaderProvider symProv = new Mono.Cecil.Pdb.PdbReaderProvider ();\r
+//                                             foreach (var module in assembly.Modules) {\r
+//                                                     ISymbolReader sym = this.options.Assembly.IsFilename ?\r
+//                                                             symProv.GetSymbolReader (module, this.options.Assembly.Filename) :\r
+//                                                             symProv.GetSymbolReader (module, this.options.Assembly.Streams.Symbols);\r
+//                                                     module.ReadSymbols (sym);\r
+//                                                     this.symReaders.Add (sym);\r
+//                                             }\r
+//                                             this.usingPdb = true;\r
+//                                     } catch {\r
+//                                     }\r
                                }\r
                                if (!this.usingMdb && !this.usingPdb) {\r
                                        this.warnings.Add ("-debug specified, but no MDB or PDB symbol file found.");\r
@@ -92,19 +94,19 @@ namespace Mono.CodeContracts.Rewrite {
                private ISymbolWriter LoadSymbolWriter(AssemblyDefinition assembly, AssemblyRef output)\r
                {\r
                        // TODO: Get symbol writing to work.\r
-                       ISymbolWriterProvider symProv = null;\r
-                       if (this.usingMdb) {\r
-                               symProv = new Mono.Cecil.Mdb.MdbWriterProvider ();\r
-                       } else if (this.usingPdb) {\r
-                               symProv = new Mono.Cecil.Pdb.PdbWriterProvider ();\r
-                       } else {\r
-                               this.warnings.Add ("-writePDBFile specified, but no symbol file found, cannot write symbols.");\r
-                       }\r
-                       if (symProv != null) {\r
-                               return output.IsFilename ?\r
-                                       symProv.GetSymbolWriter (assembly.MainModule, output.Filename) :\r
-                                       symProv.GetSymbolWriter (assembly.MainModule, output.Streams.Symbols);\r
-                       }\r
+//                     ISymbolWriterProvider symProv = null;\r
+//                     if (this.usingMdb) {\r
+//                             symProv = new Mono.Cecil.Mdb.MdbWriterProvider ();\r
+//                     } else if (this.usingPdb) {\r
+//                             symProv = new Mono.Cecil.Pdb.PdbWriterProvider ();\r
+//                     } else {\r
+//                             this.warnings.Add ("-writePDBFile specified, but no symbol file found, cannot write symbols.");\r
+//                     }\r
+//                     if (symProv != null) {\r
+//                             return output.IsFilename ?\r
+//                                     symProv.GetSymbolWriter (assembly.MainModule, output.Filename) :\r
+//                                     symProv.GetSymbolWriter (assembly.MainModule, output.Streams.Symbols);\r
+//                     }\r
                        return null;\r
                }\r
 \r
@@ -119,11 +121,13 @@ namespace Mono.CodeContracts.Rewrite {
                                return RewriterResults.Error ("No assembly given to rewrite");\r
                        }\r
                        AssemblyDefinition assembly = this.options.Assembly.IsFilename ?\r
-                               AssemblyDefinition.ReadAssembly (this.options.Assembly.Filename) :\r
-                               AssemblyDefinition.ReadAssembly (this.options.Assembly.Streams.Assembly);\r
+                               AssemblyFactory.GetAssembly (this.options.Assembly.Filename) :\r
+                               AssemblyFactory.GetAssembly (this.options.Assembly.Streams.Assembly);\r
                        \r
                        if (this.options.ForceAssemblyRename != null) {\r
-                               assembly.Name = new AssemblyNameDefinition (this.options.ForceAssemblyRename, new Version (0, 0, 0, 0));\r
+                               assembly.Name.Name = this.options.ForceAssemblyRename;\r
+                       } else if (this.options.OutputFile.IsSet && this.options.OutputFile.IsFilename) {\r
+                               assembly.Name.Name = Path.GetFileNameWithoutExtension(this.options.OutputFile.Filename);\r
                        }\r
 \r
                        if (options.Debug) {\r
@@ -147,10 +151,9 @@ namespace Mono.CodeContracts.Rewrite {
                                rewriter.Rewrite (assembly);\r
 \r
                                if (output.IsFilename) {\r
-                                       assembly.Name.Name = Path.GetFileNameWithoutExtension (output.Filename);\r
-                                       assembly.Write (output.Filename);\r
+                                       AssemblyFactory.SaveAssembly(assembly, output.Filename);\r
                                } else {\r
-                                       assembly.Write (output.Streams.Assembly);\r
+                                       AssemblyFactory.SaveAssembly(assembly, output.Streams.Assembly);\r
                                }\r
                        } finally {\r
                                if (symWriter != null) {\r
index 25b6c1b59a5ec31c3bd518995f470856257b183a..b8faf1f0ad9f901506ee590815a9d09bd038613c 100644 (file)
@@ -40,15 +40,15 @@ using Mono.Cecil.Cil;
 namespace Mono.CodeContracts.Rewrite {\r
        class TransformContractsVisitor : ExprVisitor {\r
 \r
-               public TransformContractsVisitor (MethodDefinition method, Dictionary<Expr, Instruction> instructionLookup, ContractsRuntime contractsRuntime)\r
+               public TransformContractsVisitor (ModuleDefinition module, MethodDefinition method, Dictionary<Expr, Instruction> instructionLookup, ContractsRuntime contractsRuntime)\r
                {\r
-                       this.module = method.Module;\r
+                       //this.module = method.Module;\r
                        this.instructionLookup = instructionLookup;\r
                        this.contractsRuntime = contractsRuntime;\r
-                       this.methodInfo = new MethodInfo (method);\r
+                       this.methodInfo = new MethodInfo (module, method);\r
                }\r
 \r
-               private ModuleDefinition module;\r
+               //private ModuleDefinition module;\r
                private Dictionary<Expr, Instruction> instructionLookup;\r
                private ContractsRuntime contractsRuntime;\r
                private MethodInfo methodInfo;\r