mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-27 11:10:23 +02:00
+ introduced a private type TCodePtrList, which is the specialization
TFPGList<CodePointer> on archs/memory models where CodePointer is different than Pointer. On archs/memory models where CodePointer = Pointer, TCodePtrList is simply an alias of TList and the fgl unit isn't pulled in. * the type of FindGlobalComponentList changed to TCodePtrList and the typecasts from TFindGlobalComponent (procvar type) to Pointer changed to CodePointer. This fixes compilation of unit classes in the i8086 medium memory model. git-svn-id: trunk@25357 -
This commit is contained in:
parent
7cef301e84
commit
e342c11085
@ -18,6 +18,14 @@
|
||||
{ determine the type of the resource/form file }
|
||||
{$define Win16Res}
|
||||
|
||||
{$if defined(FPC_MM_TINY) or defined(FPC_MM_SMALL) or defined(FPC_MM_LARGE) or defined(FPC_MM_HUGE)}
|
||||
{ CodePointer = Pointer; nothing to define }
|
||||
{$elseif defined(FPC_MM_MEDIUM) or defined(FPC_MM_COMPACT)}
|
||||
{$define FPC_CODEPOINTER_DIFFERENT_THAN_POINTER}
|
||||
{$else}
|
||||
{$fatal Unknown i8086 memory model.}
|
||||
{$endif}
|
||||
|
||||
unit Classes;
|
||||
|
||||
interface
|
||||
@ -26,7 +34,7 @@ uses
|
||||
typinfo,
|
||||
rtlconsts,
|
||||
types,
|
||||
{$ifdef FPC_TESTGENERICS}
|
||||
{$if defined(FPC_TESTGENERICS) or defined(FPC_CODEPOINTER_DIFFERENT_THAN_POINTER)}
|
||||
fgl,
|
||||
{$endif}
|
||||
sysutils;
|
||||
@ -35,6 +43,13 @@ uses
|
||||
|
||||
implementation
|
||||
|
||||
type
|
||||
{$ifdef FPC_CODEPOINTER_DIFFERENT_THAN_POINTER}
|
||||
TCodePtrList = specialize TFPGList<CodePointer>;
|
||||
{$else FPC_CODEPOINTER_DIFFERENT_THAN_POINTER}
|
||||
TCodePtrList = TList;
|
||||
{$endif FPC_CODEPOINTER_DIFFERENT_THAN_POINTER}
|
||||
|
||||
{ OS - independent class implementations are in /inc directory. }
|
||||
{$i classes.inc}
|
||||
|
||||
|
@ -881,23 +881,28 @@ Type
|
||||
AClass : TComponentClass;
|
||||
end;
|
||||
|
||||
{$ifndef i8086}
|
||||
type
|
||||
TCodePtrList = TList;
|
||||
{$endif i8086}
|
||||
|
||||
Var
|
||||
InitHandlerList : TList;
|
||||
FindGlobalComponentList : TList;
|
||||
FindGlobalComponentList : TCodePtrList;
|
||||
|
||||
procedure RegisterFindGlobalComponentProc(AFindGlobalComponent: TFindGlobalComponent);
|
||||
begin
|
||||
if not(assigned(FindGlobalComponentList)) then
|
||||
FindGlobalComponentList:=TList.Create;
|
||||
if FindGlobalComponentList.IndexOf(Pointer(AFindGlobalComponent))<0 then
|
||||
FindGlobalComponentList.Add(Pointer(AFindGlobalComponent));
|
||||
FindGlobalComponentList:=TCodePtrList.Create;
|
||||
if FindGlobalComponentList.IndexOf(CodePointer(AFindGlobalComponent))<0 then
|
||||
FindGlobalComponentList.Add(CodePointer(AFindGlobalComponent));
|
||||
end;
|
||||
|
||||
|
||||
procedure UnregisterFindGlobalComponentProc(AFindGlobalComponent: TFindGlobalComponent);
|
||||
begin
|
||||
if assigned(FindGlobalComponentList) then
|
||||
FindGlobalComponentList.Remove(Pointer(AFindGlobalComponent));
|
||||
FindGlobalComponentList.Remove(CodePointer(AFindGlobalComponent));
|
||||
end;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user