Browse Source

Remove unnecessary Clone() calls in TransformArrayInitializers

pull/734/head
Siegfried Pammer 9 years ago
parent
commit
dde966746c
  1. 4
      ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs
  2. 2
      ICSharpCode.Decompiler/Tests/RoundtripAssembly.cs

4
ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs

@ -76,8 +76,6 @@ namespace ICSharpCode.Decompiler.IL.Transforms
(i, value) => { (i, value) => {
if (value == null) if (value == null)
value = GetNullExpression(elementType); value = GetNullExpression(elementType);
else
value = value.Clone();
return StElem(new LdLoc(tempStore), new[] { new LdcI4(i) }, value, elementType); return StElem(new LdLoc(tempStore), new[] { new LdcI4(i) }, value, elementType);
} }
)); ));
@ -92,7 +90,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
var block = new Block(); var block = new Block();
var tempStore = function.RegisterVariable(VariableKind.StackSlot, v.Type); var tempStore = function.RegisterVariable(VariableKind.StackSlot, v.Type);
block.Instructions.Add(new StLoc(tempStore, new NewArr(elementType, arrayLength.Select(l => new LdcI4(l)).ToArray()))); block.Instructions.Add(new StLoc(tempStore, new NewArr(elementType, arrayLength.Select(l => new LdcI4(l)).ToArray())));
block.Instructions.AddRange(values.SelectWithIndex((i, value) => StElem(new LdLoc(tempStore), new[] { new LdcI4(i) }, value.Clone(), elementType))); block.Instructions.AddRange(values.SelectWithIndex((i, value) => StElem(new LdLoc(tempStore), new[] { new LdcI4(i) }, value, elementType)));
block.FinalInstruction = new LdLoc(tempStore); block.FinalInstruction = new LdLoc(tempStore);
body.Instructions[pos].ReplaceWith(new StLoc(finalStore, block)); body.Instructions[pos].ReplaceWith(new StLoc(finalStore, block));
RemoveInstructions(body, pos + 1, instructionsToRemove); RemoveInstructions(body, pos + 1, instructionsToRemove);

2
ICSharpCode.Decompiler/Tests/RoundtripAssembly.cs

@ -47,7 +47,7 @@ namespace ICSharpCode.Decompiler.Tests
RunWithTest("Newtonsoft.Json-net40", "Newtonsoft.Json.dll", "Newtonsoft.Json.Tests.dll"); RunWithTest("Newtonsoft.Json-net40", "Newtonsoft.Json.dll", "Newtonsoft.Json.Tests.dll");
} }
[Test, Ignore("Causes assertions in DelegateConstruction")] [Test]
public void NRefactory_CSharp() public void NRefactory_CSharp()
{ {
try { try {

Loading…
Cancel
Save