From e342c11085be72709316a114c17a62f359ed416f Mon Sep 17 00:00:00 2001 From: nickysn Date: Fri, 23 Aug 2013 19:25:51 +0000 Subject: [PATCH] + introduced a private type TCodePtrList, which is the specialization TFPGList 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 - --- rtl/msdos/classes.pp | 17 ++++++++++++++++- rtl/objpas/classes/classes.inc | 15 ++++++++++----- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/rtl/msdos/classes.pp b/rtl/msdos/classes.pp index cbd5d78c70..95fb6253c4 100644 --- a/rtl/msdos/classes.pp +++ b/rtl/msdos/classes.pp @@ -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; +{$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} diff --git a/rtl/objpas/classes/classes.inc b/rtl/objpas/classes/classes.inc index da6d0d46a9..970dd61dd0 100644 --- a/rtl/objpas/classes/classes.inc +++ b/rtl/objpas/classes/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;