void RoundTripCodeCopier(string assemblyName, string pdbName, bool allowCheckerFail) { PeVerifyResult expectedResult = PeVerify.VerifyAssembly(assemblyName); IAssembly assembly = LoadAssembly(assemblyName); if (pdbName != null) { using (var f = File.OpenRead(pdbName)) { using (var pdbReader = new PdbReader(f, host)) { var codeAssembly = Decompiler.GetCodeModelFromMetadataModel(this.host, assembly, pdbReader); CodeDeepCopier copier = new CodeDeepCopier(host); codeAssembly = copier.Copy(codeAssembly); Checker checker = new Checker(this.host); checker.Traverse(codeAssembly); Debug.Assert(checker.Errors.Count == 0); AssertWriteToPeFile(expectedResult, codeAssembly, pdbReader); } } } else { var codeAssembly = Decompiler.GetCodeModelFromMetadataModel(this.host, assembly, null); CodeDeepCopier copier = new CodeDeepCopier(host); codeAssembly = copier.Copy(codeAssembly); Checker checker = new Checker(this.host); checker.Traverse(codeAssembly); Debug.Assert(allowCheckerFail || checker.Errors.Count == 0); AssertWriteToPeFile(expectedResult, codeAssembly, null); } }
protected List <NamespaceTypeDefinition> WithMoreGenericParameters(List <INamespaceTypeDefinition> genericTypes) { var copier = new CodeDeepCopier(this.host); var copies = new List <NamespaceTypeDefinition>(); foreach (var genericType in genericTypes) { var copy = copier.Copy(genericType); copy.Name = this.host.NameTable.GetNameFor(genericType.Name.Value + "<<>>"); copies.Add(copy); this.AddToAllTypes(copy); this.AddGenericParamInPlace(copy); var fixer = new ReferenceFixer(this.host, copy); fixer.Rewrite(copy); } return(copies); }
void RoundTripMutableCopyAndAddGenericParameter(string assemblyName, string pdbName) { PeVerifyResult expectedResult = PeVerify.VerifyAssembly(assemblyName); IAssembly assembly = LoadAssembly(assemblyName); using (var f = File.OpenRead(pdbName)) { using (var pdbReader = new PdbReader(f, host)) { var codeAssembly = Decompiler.GetCodeModelFromMetadataModel(this.host, assembly, pdbReader); codeAssembly = new CodeDeepCopier(host).Copy(codeAssembly); AddGenericParameters adder = new AddGenericParameters(host, codeAssembly.AllTypes, 0); codeAssembly = (Assembly)adder.Rewrite(codeAssembly); Checker checker = new Checker(this.host); checker.Traverse(codeAssembly); Debug.Assert(checker.Errors.Count == 0); AssertWriteToPeFile(expectedResult, codeAssembly, pdbReader); } } }
void RoundTripCopyAndExecute(string assemblyName, string pdbName, bool verificationMayFail) { PeVerifyResult expectedResult = !verificationMayFail ? PeVerify.VerifyAssembly(assemblyName) : PeVerify.RunPeVerifyOnAssembly(assemblyName); string expectedOutput = Execute(assemblyName); IAssembly assembly = LoadAssembly(assemblyName); using (var f = File.OpenRead(pdbName)) { using (var pdbReader = new PdbReader(f, host)) { var codeAssembly = Decompiler.GetCodeModelFromMetadataModel(this.host, assembly, pdbReader); var copier = new CodeDeepCopier(host); codeAssembly = copier.Copy(codeAssembly); Checker checker = new Checker(this.host); checker.Traverse(codeAssembly); Debug.Assert(checker.Errors.Count == 0); AssertWriteToPeFile(expectedResult, codeAssembly, pdbReader); AssertExecute(expectedOutput, assemblyName); } } }