瀏覽代碼

fcl-passrc: useanalyzer: fixed implementation class forward

git-svn-id: trunk@47406 -
(cherry picked from commit 5c161e8542fa48a9f5608b6706d2f06b6af1cc81)
Mattias Gaertner 4 年之前
父節點
當前提交
474a7b9879
共有 2 個文件被更改,包括 28 次插入8 次删除
  1. 3 8
      packages/fcl-passrc/src/pasuseanalyzer.pas
  2. 25 0
      packages/fcl-passrc/tests/tcuseanalyzer.pas

+ 3 - 8
packages/fcl-passrc/src/pasuseanalyzer.pas

@@ -3159,15 +3159,10 @@ begin
 end;
 
 function TPasAnalyzer.IsSpecializedGenericType(El: TPasElement): boolean;
-var
-  GenScope: TPasGenericScope;
 begin
-  if El is TPasGenericType then
-    begin
-    GenScope:=El.CustomData as TPasGenericScope;
-    if (GenScope<>nil) and (GenScope.SpecializedFromItem<>nil) then
-      exit(true);
-    end;
+  if (El is TPasGenericType) and (El.CustomData is TPasGenericScope)
+      and (TPasGenericScope(El.CustomData).SpecializedFromItem<>nil) then
+    exit(true);
   Result:=false;
 end;
 

+ 25 - 0
packages/fcl-passrc/tests/tcuseanalyzer.pas

@@ -78,6 +78,7 @@ type
     procedure TestM_Class;
     procedure TestM_ClassForward;
     procedure TestM_Class_Property;
+    procedure TestM_ClassForward_Generic;
     procedure TestM_Class_PropertyProtected;
     procedure TestM_Class_PropertyOverride;
     procedure TestM_Class_PropertyOverride2;
@@ -1153,6 +1154,30 @@ begin
   AnalyzeProgram;
 end;
 
+procedure TTestUseAnalyzer.TestM_ClassForward_Generic;
+begin
+  StartUnit(false);
+  Add([
+  '{$mode delphi}',
+  'interface',
+  'type',
+  '  {tobject_used}TObject = class',
+  '  end;',
+  '  TBird = class;',
+  '  TAnt = class end;',
+  '  TBird = class end;',
+  'implementation',
+  'type',
+  '  TBird2 = class;',
+  '  TAnt2 = class end;',
+  '  TBird2 = class end;',
+  'var Bird2: TBird2;',
+  'begin',
+  '  if Bird2=nil then;',
+  '']);
+  AnalyzeUnit;
+end;
+
 procedure TTestUseAnalyzer.TestM_Class_PropertyProtected;
 begin
   StartUnit(false);