From 24fdee7808dd6025d7f01e5976ee158197163954 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Thu, 24 Feb 2011 16:24:43 +0100 Subject: [PATCH] Fix order of array specifiers when creating nested arrays. --- .../Ast/AstMethodBodyBuilder.cs | 19 +++++++++++-------- .../Tests/MultidimensionalArray.cs | 5 +++++ 2 files changed, 16 insertions(+), 8 deletions(-) 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][,]; + } }