فهرست منبع

* when declaring a generic type ensure that the newly added dummy symbol correctly resolves to potential symbols from another unit
+ added tests

Sven/Sarah Barth 4 روز پیش
والد
کامیت
2995772a02
3فایلهای تغییر یافته به همراه38 افزوده شده و 0 حذف شده
  1. 2 0
      compiler/pdecl.pas
  2. 18 0
      tests/test/tgeneric124.pp
  3. 18 0
      tests/test/tgeneric125.pp

+ 2 - 0
compiler/pdecl.pas

@@ -853,6 +853,8 @@ implementation
                       Include(sym.symoptions,sp_generic_dummy);
                       ttypesym(sym).typedef.typesym:=sym;
                       sym.visibility:=symtablestack.top.currentvisibility;
+                      { add as dummy symbol before adding it to the symtable stack }
+                      add_generic_dummysym(sym,typename);
                       symtablestack.top.insertsym(sym);
                       ttypesym(sym).typedef.owner:=sym.owner;
                     end

+ 18 - 0
tests/test/tgeneric124.pp

@@ -0,0 +1,18 @@
+{ %NORUN }
+
+program tgeneric124;
+
+{$mode delphi}
+
+uses
+  Classes;
+
+type
+  TNotifyEvent<T> = procedure(Sender: TObject; const item: T) of object;
+
+var
+  { this needs to find Classes.TNotifyEvent }
+  n: TNotifyEvent;
+begin
+
+end.

+ 18 - 0
tests/test/tgeneric125.pp

@@ -0,0 +1,18 @@
+{ %NORUN }
+
+program tgeneric125;
+
+{$mode objfpc}
+
+uses
+  Classes;
+
+type
+  generic TNotifyEvent<T> = procedure(Sender: TObject; const item: T) of object;
+
+var
+  { this needs to find Classes.TNotifyEvent }
+  n: TNotifyEvent;
+begin
+
+end.