Browse Source

Fix #617: Incorrect C# translation when `callvirt` is used to invoke base constructor

pull/1464/head
Daniel Grunwald 7 years ago
parent
commit
ae2824af99
  1. 5
      ICSharpCode.Decompiler.Tests/TestCases/ILPretty/FSharpLoops_Debug.cs
  2. 5
      ICSharpCode.Decompiler.Tests/TestCases/ILPretty/FSharpLoops_Release.cs
  3. 2
      ICSharpCode.Decompiler/CSharp/CallBuilder.cs

5
ICSharpCode.Decompiler.Tests/TestCases/ILPretty/FSharpLoops_Debug.cs

@ -36,11 +36,6 @@ public static class Program
[CompilationMapping(SourceConstructFlags.Closure)] [CompilationMapping(SourceConstructFlags.Closure)]
internal sealed class disposable_00403 : IDisposable internal sealed class disposable_00403 : IDisposable
{ {
public disposable_00403()
{
((object)this)._002Ector();
}
private void System_002DIDisposable_002DDispose() private void System_002DIDisposable_002DDispose()
{ {
} }

5
ICSharpCode.Decompiler.Tests/TestCases/ILPretty/FSharpLoops_Release.cs

@ -37,11 +37,6 @@ public static class Program
[CompilationMapping(SourceConstructFlags.Closure)] [CompilationMapping(SourceConstructFlags.Closure)]
internal sealed class disposable_00403 : IDisposable internal sealed class disposable_00403 : IDisposable
{ {
public disposable_00403()
{
((object)this)._002Ector();
}
private void System_002DIDisposable_002DDispose() private void System_002DIDisposable_002DDispose()
{ {
} }

2
ICSharpCode.Decompiler/CSharp/CallBuilder.cs

@ -187,7 +187,7 @@ namespace ICSharpCode.Decompiler.CSharp
} else { } else {
target = expressionBuilder.TranslateTarget( target = expressionBuilder.TranslateTarget(
callArguments.FirstOrDefault(), callArguments.FirstOrDefault(),
nonVirtualInvocation: callOpCode == OpCode.Call, nonVirtualInvocation: callOpCode == OpCode.Call || method.IsConstructor,
memberStatic: method.IsStatic, memberStatic: method.IsStatic,
memberDeclaringType: constrainedTo ?? method.DeclaringType); memberDeclaringType: constrainedTo ?? method.DeclaringType);
if (constrainedTo == null if (constrainedTo == null

Loading…
Cancel
Save