+ } else if (class->rank) {
+ MonoMethod *amethod;
+ MonoMethodSignature *sig;
+ int count_generic = 0, first_generic = 0;
+ int method_num = 0;
+
+ class->method.count = 3 + (class->rank > 1? 2: 1);
+
+ if (class->interface_count) {
+ count_generic = generic_array_methods (class);
+ first_generic = class->method.count;
+ class->method.count += class->interface_count * count_generic;
+ }
+
+ methods = mono_image_alloc0 (class->image, sizeof (MonoMethod*) * class->method.count);
+
+ sig = mono_metadata_signature_alloc (class->image, class->rank);
+ sig->ret = &mono_defaults.void_class->byval_arg;
+ sig->pinvoke = TRUE;
+ sig->hasthis = TRUE;
+ for (i = 0; i < class->rank; ++i)
+ sig->params [i] = &mono_defaults.int32_class->byval_arg;
+
+ amethod = create_array_method (class, ".ctor", sig);
+ methods [method_num++] = amethod;
+ if (class->rank > 1) {
+ sig = mono_metadata_signature_alloc (class->image, class->rank * 2);
+ sig->ret = &mono_defaults.void_class->byval_arg;
+ sig->pinvoke = TRUE;
+ sig->hasthis = TRUE;
+ for (i = 0; i < class->rank * 2; ++i)
+ sig->params [i] = &mono_defaults.int32_class->byval_arg;
+
+ amethod = create_array_method (class, ".ctor", sig);
+ methods [method_num++] = amethod;
+ }
+ /* element Get (idx11, [idx2, ...]) */
+ sig = mono_metadata_signature_alloc (class->image, class->rank);
+ sig->ret = &class->element_class->byval_arg;
+ sig->pinvoke = TRUE;
+ sig->hasthis = TRUE;
+ for (i = 0; i < class->rank; ++i)
+ sig->params [i] = &mono_defaults.int32_class->byval_arg;
+ amethod = create_array_method (class, "Get", sig);
+ methods [method_num++] = amethod;
+ /* element& Address (idx11, [idx2, ...]) */
+ sig = mono_metadata_signature_alloc (class->image, class->rank);
+ sig->ret = &class->element_class->this_arg;
+ sig->pinvoke = TRUE;
+ sig->hasthis = TRUE;
+ for (i = 0; i < class->rank; ++i)
+ sig->params [i] = &mono_defaults.int32_class->byval_arg;
+ amethod = create_array_method (class, "Address", sig);
+ methods [method_num++] = amethod;
+ /* void Set (idx11, [idx2, ...], element) */
+ sig = mono_metadata_signature_alloc (class->image, class->rank + 1);
+ sig->ret = &mono_defaults.void_class->byval_arg;
+ sig->pinvoke = TRUE;
+ sig->hasthis = TRUE;
+ for (i = 0; i < class->rank; ++i)
+ sig->params [i] = &mono_defaults.int32_class->byval_arg;
+ sig->params [i] = &class->element_class->byval_arg;
+ amethod = create_array_method (class, "Set", sig);
+ methods [method_num++] = amethod;
+
+ for (i = 0; i < class->interface_count; i++)
+ setup_generic_array_ifaces (class, class->interfaces [i], methods, first_generic + i * count_generic);