diff --git a/Src/AST/Myc.Ast.RTL.TypeRegistry.pas b/Src/AST/Myc.Ast.RTL.TypeRegistry.pas index 50ea1a0..874897d 100644 --- a/Src/AST/Myc.Ast.RTL.TypeRegistry.pas +++ b/Src/AST/Myc.Ast.RTL.TypeRegistry.pas @@ -113,15 +113,20 @@ end; class procedure TRtlTypeRegistry.RegisterType(Info: PTypeInfo); begin - if FKnownTypes.ContainsKey(Info) then - exit; - - EnterAnalysis(Info); + TMonitor.Enter(FKnownTypes); try - var staticType := AnalyzeType(Info); - FKnownTypes.Add(Info, staticType); + if FKnownTypes.ContainsKey(Info) then + exit; + + EnterAnalysis(Info); + try + var staticType := AnalyzeType(Info); + FKnownTypes.Add(Info, staticType); + finally + ExitAnalysis(Info); + end; finally - ExitAnalysis(Info); + TMonitor.Exit(FKnownTypes); end; end;