Selaa lähdekoodia

[java/cs] handled interfaces better

Caue Waneck 13 vuotta sitten
vanhempi
commit
40e5e03026
1 muutettua tiedostoa jossa 10 lisäystä ja 11 poistoa
  1. 10 11
      gencommon.ml

+ 10 - 11
gencommon.ml

@@ -3443,23 +3443,22 @@ struct
           Hashtbl.replace params_tbl cl.cl_path applied
         | TInst(cl, params), TInst(cl2, params2) ->
           let rec loop cl2 params2 =
-            if cl == cl2 then
-              List.iter2 (get_arg) params params2
-            else begin
-              if not (List.exists (fun (cs,tls) ->
-                if (cs == cl) then begin
-                  loop cs (List.map (apply_params cl2.cl_types params2) tls);
-                  true
-                end else
-                  false
+            if cl == cl2 then begin
+              List.iter2 (get_arg) params params2;
+              true
+            end else begin
+              if not (cl.cl_interface && List.exists (fun (cs,tls) ->
+                loop cs (List.map (apply_params cl2.cl_types params2) tls)
               ) cl2.cl_implements) then
                 match cl2.cl_super with
-                  | None -> (* not related ! *) ()
+                  | None -> (* not related ! *) false
                   | Some (cs,tls) ->
                     loop cs (List.map (apply_params cl2.cl_types params2) tls)
+              else
+                true
             end
           in
-          loop cl2 params2
+          ignore (loop cl2 params2)
           
         | TEnum(e, params), TEnum(e2, params2) ->
           List.iter2 (get_arg) params params2