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;