diff --git a/TreeConverter/TreeConversion/compilation_context.cs b/TreeConverter/TreeConversion/compilation_context.cs
index 1d3389e29..b5b03a338 100644
--- a/TreeConverter/TreeConversion/compilation_context.cs
+++ b/TreeConverter/TreeConversion/compilation_context.cs
@@ -292,7 +292,19 @@ namespace PascalABCCompiler.TreeConverter
}
return false;
}
-
+
+ ///
+ /// Очистка переменных перед компиляцией интерфейсной или имплементационной части модуля
+ ///
+ public void ResetBeforeModuleCompilation()
+ {
+ // Эти кэши нужно очищать перед компиляцией модуля, потому что иначе
+ // в pcu файлы будет записываться разное кол-во типов оттуда в зависимости от того,
+ // использовались ли они в других модулях, которые компилировались ранее EVA 26.03.2026
+ TypedFiles.Clear();
+ TypedSets.Clear();
+ }
+
public void reset()
{
//CurrentHandlerList = null; // SSM 29/03/22 - не сработало
@@ -310,9 +322,7 @@ namespace PascalABCCompiler.TreeConverter
type_stack.Clear();
clear_special_local_vars();
_scope_stack.Clear();
- TypedFiles.Clear();
ShortStringTypes.Clear();
- TypedSets.Clear();
_compiled_tn = null;
_explicit_interface_type = null;
_ctt = null;
diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs
index c444962d7..c683cd8d1 100644
--- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs
+++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs
@@ -178,7 +178,10 @@ namespace PascalABCCompiler.TreeConverter
///
/// Можно переопределять для добавления действий перед конвертацией интерфейсной и имплементационной частей
///
- public virtual void BeforeCompilationActions() { }
+ public virtual void BeforeCompilationActions()
+ {
+ ResetBeforeModuleCompilation();
+ }
///
/// Можно переопределять для добавления действий после конвертации интерфейсной и имплементационной частей
@@ -659,6 +662,14 @@ namespace PascalABCCompiler.TreeConverter
}
}
+ ///
+ /// Очистка переменных перед компиляцией интерфейсной или имплементационной части модуля
+ ///
+ private void ResetBeforeModuleCompilation()
+ {
+ context.ResetBeforeModuleCompilation();
+ }
+
public void Reset()
{
_system_unit = null;