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;