Explorar o código

* fix intf assignment

git-svn-id: trunk@6007 -
florian %!s(int64=18) %!d(string=hai) anos
pai
achega
8ecdbbc515
Modificáronse 1 ficheiros con 22 adicións e 19 borrados
  1. 22 19
      compiler/nld.pas

+ 22 - 19
compiler/nld.pas

@@ -646,25 +646,28 @@ implementation
         { call helpers for interface }
         if is_interfacecom(left.resultdef) then
          begin
-           {
-           hp:=
-             ccallparanode.create(
-               ctypeconvnode.create_internal(right,voidpointertype),
-             ccallparanode.create(
-               ctypeconvnode.create_internal(left,voidpointertype),
-               nil));
-           result:=ccallnode.createintern('fpc_intf_assign',hp);
-           }
-
-           hp:=
-             ccallparanode.create(
-               cguidconstnode.create(tobjectdef(left.resultdef).iidguid^),
-             ccallparanode.create(
-               ctypeconvnode.create_internal(right,voidpointertype),
-             ccallparanode.create(
-               ctypeconvnode.create_internal(left,voidpointertype),
-               nil)));
-           result:=ccallnode.createintern('fpc_intf_assign_by_iid',hp);
+           if right.resultdef.is_related(left.resultdef) then
+             begin
+               hp:=
+                 ccallparanode.create(
+                   ctypeconvnode.create_internal(right,voidpointertype),
+                 ccallparanode.create(
+                   ctypeconvnode.create_internal(left,voidpointertype),
+                   nil));
+               result:=ccallnode.createintern('fpc_intf_assign',hp)
+             end
+           else
+             begin
+               hp:=
+                 ccallparanode.create(
+                   cguidconstnode.create(tobjectdef(left.resultdef).iidguid^),
+                 ccallparanode.create(
+                   ctypeconvnode.create_internal(right,voidpointertype),
+                 ccallparanode.create(
+                   ctypeconvnode.create_internal(left,voidpointertype),
+                   nil)));
+               result:=ccallnode.createintern('fpc_intf_assign_by_iid',hp);
+             end;
 
            left:=nil;
            right:=nil;