+ 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:
nickysn 2013-08-23 19:25:51 +00:00
parent 7cef301e84
commit e342c11085
2 changed files with 26 additions and 6 deletions

View File

@ -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}

View File

@ -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;