Tue Aug 22 11:10:33 CEST 2006 Paolo Molaro <lupus@ximian.com>
authorPaolo Molaro <lupus@oddwiz.org>
Tue, 22 Aug 2006 09:12:09 +0000 (09:12 -0000)
committerPaolo Molaro <lupus@oddwiz.org>
Tue, 22 Aug 2006 09:12:09 +0000 (09:12 -0000)
* class.c: recursively check parent's explicit implementations
of interface methods (fixes bug #79125).

svn path=/trunk/mono/; revision=64181

mono/metadata/ChangeLog
mono/metadata/class.c

index 07550bc9413dae340674d748e0d5f5483eda8e88..d6e9d96fd2df40caedcd9f9e7eb6f476e3b358c4 100644 (file)
@@ -1,3 +1,9 @@
+
+Tue Aug 22 11:10:33 CEST 2006 Paolo Molaro <lupus@ximian.com>
+
+       * class.c: recursively check parent's explicit implementations
+       of interface methods (fixes bug #79125).
+
 2006-08-19  Miguel de Icaza  <miguel@novell.com>
 
        * filewatcher.c: Avoid warnings when building, do not redefine
index 7e01af9cdcc83b4a0706cf4ca9b0d32a83dec67e..4f1ec72217bcbc496c0ffa16feedd209330a2340 100644 (file)
@@ -2020,11 +2020,14 @@ mono_class_setup_vtable_general (MonoClass *class, MonoMethod **overrides, int o
                                         */
                                        if (!(vtable [io + l])) {
                                                MonoClass *parent = class->parent;
-
-                                               if ((ic->interface_id <= parent->max_interface_id) && 
-                                                       (parent->interface_offsets [ic->interface_id] != -1) &&
-                                                       parent->vtable)
-                                                       vtable [io + l] = parent->vtable [parent->interface_offsets [ic->interface_id] + l];
+                                               
+                                               for (; parent; parent = parent->parent) {
+                                                       if ((ic->interface_id <= parent->max_interface_id) && 
+                                                                       (parent->interface_offsets [ic->interface_id] != -1) &&
+                                                                       parent->vtable) {
+                                                               vtable [io + l] = parent->vtable [parent->interface_offsets [ic->interface_id] + l];
+                                                       }
+                                               }
                                        }
 
                                        if (!(vtable [io + l])) {