Browse Source

* Fix bug #35305, lazy instantiation of class alias list. Patch from Ondrej Pokorny

git-svn-id: trunk@41819 -
michael 6 years ago
parent
commit
e3973e9c4e
2 changed files with 12 additions and 5 deletions
  1. 1 1
      rtl/objpas/classes/classes.inc
  2. 11 4
      rtl/objpas/classes/cregist.inc

+ 1 - 1
rtl/objpas/classes/classes.inc

@@ -2496,7 +2496,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);

+ 11 - 4
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;