LINUX.ORG.RU

История изменений

Исправление bormant, (текущая версия) :

PPS. Коллекции из стандартного Objects из FPC можно использовать.
В руководстве по языку указано

const MaxBytes = 16384;

Но на самом деле там не все так грустно, поэтому в аналогичных случаях стоит сверяться с исходником RTL:
const
{$IFDEF FPC}
  {$IFDEF CPU16}
   MaxBytes = 16384;
  {$ELSE CPU16}
   MaxBytes = 128*1024*128;
  {$ENDIF CPU16}
{$ELSE}
   MaxBytes = 16384;
{$ENDIF}
  MaxCollectionSize = MaxBytes div SizeOf(Pointer);
type
  PItemList = ^TItemList;
  TItemList = array [0..MaxCollectionSize-1] of Pointer;
  TCollection = object(TObject)
    Items: PItemList;
    ...

procedure TCollection.SetLimit(ALimit: LongInt);
...
  if ALimit > MaxCollectionSize then
    ALimit := MaxCollectionSize;

Исходная версия bormant, :

PPS. Не надо надеяться на коллекции из стандартного Objects из FPC, там:

const
  MaxBytes = 16384;
  MaxCollectionSize = MaxBytes div SizeOf(Pointer);
type
  PItemList = ^TItemList;
  TItemList = array [0..MaxCollectionSize-1] of Pointer;
  TCollection = object(TObject)
    Items: PItemList;
    ...

procedure TCollection.SetLimit(ALimit: LongInt);
...
  if ALimit > MaxCollectionSize then
    ALimit := MaxCollectionSize;