diff --git a/ICSharpCode.Decompiler/Ast/AstMethodBodyBuilder.cs b/ICSharpCode.Decompiler/Ast/AstMethodBodyBuilder.cs index 26d5b7bef..8bd3385c6 100644 --- a/ICSharpCode.Decompiler/Ast/AstMethodBodyBuilder.cs +++ b/ICSharpCode.Decompiler/Ast/AstMethodBodyBuilder.cs @@ -328,18 +328,21 @@ namespace Decompiler #endregion #region Arrays case Code.Newarr: - { - var ace = new Ast.ArrayCreateExpression(); - ace.Type = operandAsTypeRef; - ace.Arguments.Add(arg1); - return ace; - } case (Code)ILCode.InitArray: { var ace = new Ast.ArrayCreateExpression(); ace.Type = operandAsTypeRef; - ace.Initializer = new ArrayInitializerExpression(); - ace.Initializer.Elements.AddRange(args); + ComposedType ct = operandAsTypeRef as ComposedType; + if (ct != null) { + // change "new (int[,])[10] to new int[10][,]" + ct.ArraySpecifiers.MoveTo(ace.AdditionalArraySpecifiers); + } + if (opCode == ILCode.InitArray) { + ace.Initializer = new ArrayInitializerExpression(); + ace.Initializer.Elements.AddRange(args); + } else { + ace.Arguments.Add(arg1); + } return ace; } case Code.Ldlen: diff --git a/ICSharpCode.Decompiler/Tests/MultidimensionalArray.cs b/ICSharpCode.Decompiler/Tests/MultidimensionalArray.cs index a7b9a631e..b8a16a36a 100644 --- a/ICSharpCode.Decompiler/Tests/MultidimensionalArray.cs +++ b/ICSharpCode.Decompiler/Tests/MultidimensionalArray.cs @@ -24,4 +24,9 @@ public static class MultidimensionalArray b[5, 3][2] = y; } } + + public static int[][,] MakeArray() + { + return new int[10][,]; + } }