From b3760f5daa0ecc6ce751fdc06a26adc9c0888dd5 Mon Sep 17 00:00:00 2001 From: michael <michael@freepascal.org> Date: Sat, 13 Jul 2019 13:20:06 +0000 Subject: [PATCH] * Merging revisions 41819 from trunk: ------------------------------------------------------------------------ r41819 | michael | 2019-04-01 19:31:20 +0200 (Mon, 01 Apr 2019) | 1 line * Fix bug #35305, lazy instantiation of class alias list. Patch from Ondrej Pokorny ------------------------------------------------------------------------ git-svn-id: branches/fixes_3_2@42417 - --- rtl/objpas/classes/classes.inc | 2 +- rtl/objpas/classes/cregist.inc | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/rtl/objpas/classes/classes.inc b/rtl/objpas/classes/classes.inc index bb20611bbc..bb030313dc 100644 --- a/rtl/objpas/classes/classes.inc +++ b/rtl/objpas/classes/classes.inc @@ -2491,7 +2491,7 @@ begin FindGlobalComponentList:=nil; IntConstList := TThreadList.Create; ClassList := TThreadList.Create; - ClassAliasList := TStringList.Create; + ClassAliasList := nil; { on unix this maps to a simple rw synchornizer } GlobalNameSpace := TMultiReadExclusiveWriteSynchronizer.Create; RegisterInitComponentHandler(TComponent,@DefaultInitHandler); diff --git a/rtl/objpas/classes/cregist.inc b/rtl/objpas/classes/cregist.inc index 011776c56c..1354608438 100644 --- a/rtl/objpas/classes/cregist.inc +++ b/rtl/objpas/classes/cregist.inc @@ -44,9 +44,13 @@ procedure RegisterClassAlias(AClass: TPersistentClass; const Alias: string); var I : integer; begin + I:=-1; ClassList.LockList; try - i := ClassAliasList.IndexOf(Alias); + if ClassAliasList=nil then + ClassAliasList := TStringList.Create + else + i := ClassAliasList.IndexOf(Alias); if I = -1 then ClassAliasList.AddObject( Alias, TObject(AClass) ); finally @@ -101,16 +105,19 @@ begin Result := TPersistentClass(Items[I]); if Result.ClassNameIs(AClassName) then Exit; end; + if Assigned(ClassAliasList) then + begin I := ClassAliasList.Indexof(AClassName); if I >= 0 then //found Begin Result := TPersistentClass(ClassAliasList.Objects[i]); exit; end; + end; Result := nil; - finally - ClassList.Unlocklist; - end; + finally + ClassList.Unlocklist; + end; end;