Browse Source

fcl-passrc: fixed typecast TList<TBird> to TList<TEagle>

git-svn-id: trunk@47039 -
Mattias Gaertner 4 years ago
parent
commit
18f5fab782

+ 10 - 3
packages/fcl-passrc/src/pasresolver.pp

@@ -29715,12 +29715,19 @@ function TPasResolver.CheckClassIsClass(SrcType, DestType: TPasType): integer;
     i: Integer;
     i: Integer;
     SrcParam, DestParam: TPasType;
     SrcParam, DestParam: TPasType;
     SrcParamScope, DestParamScope: TPasGenericScope;
     SrcParamScope, DestParamScope: TPasGenericScope;
+    SrcSpecializedFromItem, DestSpecializedFromItem: TPRSpecializedItem;
   begin
   begin
-    if SrcScope.SpecializedFromItem.GenericEl<>DestScope.SpecializedFromItem.GenericEl then
+    SrcSpecializedFromItem:=SrcScope.SpecializedFromItem;
+    DestSpecializedFromItem:=DestScope.SpecializedFromItem;
+    if SrcSpecializedFromItem=nil then
+      exit(false);
+    if DestSpecializedFromItem=nil then
+      exit(false);
+    if SrcSpecializedFromItem.GenericEl<>DestSpecializedFromItem.GenericEl then
       exit(false);
       exit(false);
     // specialized from same generic -> check params
     // specialized from same generic -> check params
-    SrcParams:=SrcScope.SpecializedFromItem.Params;
-    DestParams:=DestScope.SpecializedFromItem.Params;
+    SrcParams:=SrcSpecializedFromItem.Params;
+    DestParams:=DestSpecializedFromItem.Params;
     for i:=0 to length(SrcParams)-1 do
     for i:=0 to length(SrcParams)-1 do
       begin
       begin
       SrcParam:=SrcParams[i];
       SrcParam:=SrcParams[i];

+ 2 - 2
packages/fcl-passrc/tests/tcresolvegenerics.pas

@@ -1650,8 +1650,8 @@ begin
   '  B: TBird;',
   '  B: TBird;',
   '  List: TList<TEagle>;',
   '  List: TList<TEagle>;',
   'begin',
   'begin',
- // '  List:=TList<Eagle>(B.Legs);',
- // '  TList<Eagle>(B.Legs):=List;',
+  '  List:=TList<TEagle>(B.Legs);',
+  '  TList<TEagle>(B.Legs):=List;',
   '',
   '',
   '']);
   '']);
   ParseProgram;
   ParseProgram;