Browse Source

* fix intf assignment

git-svn-id: trunk@6007 -
florian 18 years ago
parent
commit
8ecdbbc515
1 changed files with 22 additions and 19 deletions
  1. 22 19
      compiler/nld.pas

+ 22 - 19
compiler/nld.pas

@@ -646,25 +646,28 @@ implementation
         { call helpers for interface }
         { call helpers for interface }
         if is_interfacecom(left.resultdef) then
         if is_interfacecom(left.resultdef) then
          begin
          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;
            left:=nil;
            right:=nil;
            right:=nil;