[mcs] Add dictionary initializer for arrays.
authorMarek Safar <marek.safar@gmail.com>
Fri, 5 Dec 2014 15:51:25 +0000 (16:51 +0100)
committerMarek Safar <marek.safar@gmail.com>
Fri, 5 Dec 2014 15:51:25 +0000 (16:51 +0100)
mcs/mcs/expression.cs
mcs/tests/test-dictinit-03.cs [new file with mode: 0644]
mcs/tests/ver-il-net_4_5.xml

index deb121c140da9e232d7a8518aa7fe30dfa6beba2..e3871bd6e8a9580597fda99230e229e797e92e36 100644 (file)
@@ -11780,6 +11780,11 @@ namespace Mono.CSharp
                        var init = rc.CurrentInitializerVariable;
                        var type = init.Type;
 
+                       if (type.IsArray) {
+                               target = new ArrayAccess (new ElementAccess (init, args, loc), loc);
+                               return true;
+                       }
+
                        var indexers = MemberCache.FindMembers (type, MemberCache.IndexerNameAlias, false);
                        if (indexers == null && type.BuiltinType != BuiltinTypeSpec.Type.Dynamic) {
                                ElementAccess.Error_CannotApplyIndexing (rc, type, loc);
diff --git a/mcs/tests/test-dictinit-03.cs b/mcs/tests/test-dictinit-03.cs
new file mode 100644 (file)
index 0000000..6b44ec0
--- /dev/null
@@ -0,0 +1,22 @@
+using System;
+
+class C
+{
+       int[,] a = new int [2, 3];
+
+       static int Main ()
+       {
+               var res = new C { a = { [1, 1] = 11, [0, 2] = 2} };
+               if (res.a [1, 1] != 11)
+                       return 1;
+
+               if (res.a [1, 2] != 0)
+                       return 2;
+
+               if (res.a [0, 2] != 2)
+                       return 3;
+
+               Console.WriteLine ("ok");
+               return 0;
+       }
+}
\ No newline at end of file
index fd4e9ad17ad44530263c6b02f21a7a1aa6a86e93..17ff3d8582a464c1e1e09311068d86518d4d7423 100644 (file)
       </method>\r
     </type>\r
   </test>\r
+  <test name="test-dictinit-03.cs">\r
+    <type name="C">\r
+      <method name="Int32 Main()" attrs="145">\r
+        <size>135</size>\r
+      </method>\r
+      <method name="Void .ctor()" attrs="6278">\r
+        <size>20</size>\r
+      </method>\r
+    </type>\r
+  </test>\r
   <test name="test-ex-filter-01.cs">\r
     <type name="X">\r
       <method name="Int32 Main()" attrs="150">\r