diff options
Diffstat (limited to 'src/linker/Linker.Steps/CodeRewriterStep.cs')
-rw-r--r-- | src/linker/Linker.Steps/CodeRewriterStep.cs | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/linker/Linker.Steps/CodeRewriterStep.cs b/src/linker/Linker.Steps/CodeRewriterStep.cs index 6d70b1a09..566a7ab1a 100644 --- a/src/linker/Linker.Steps/CodeRewriterStep.cs +++ b/src/linker/Linker.Steps/CodeRewriterStep.cs @@ -64,12 +64,15 @@ namespace Mono.Linker.Steps ret = Instruction.Create (OpCodes.Ret); processor.Append (ret); } else { - ret = cctor.Body.Instructions.Last (l => l.OpCode.Code == Code.Ret); var body = cctor.Body; - processor = cctor.Body.GetLinkerILProcessor (); +#pragma warning disable RS0030 // After MarkStep all methods should be processed and thus accessing Cecil directly is the right approach + var instructions = body.Instructions; +#pragma warning restore RS0030 + ret = instructions.Last (l => l.OpCode.Code == Code.Ret); + processor = body.GetLinkerILProcessor (); - for (int i = 0; i < body.Instructions.Count; ++i) { - var instr = body.Instructions[i]; + for (int i = 0; i < instructions.Count; ++i) { + var instr = instructions[i]; if (instr.OpCode.Code != Code.Stsfld) continue; @@ -201,7 +204,9 @@ namespace Mono.Linker.Steps case MetadataType.MVar: case MetadataType.ValueType: var vd = new VariableDefinition (method.ReturnType); +#pragma warning disable RS0030 // Anything after MarkStep should not use ILProvider since all methods are guaranteed processed body.Variables.Add (vd); +#pragma warning restore RS0030 body.InitLocals = true; il.Emit (OpCodes.Ldloca_S, vd); |