Добавление очистки кэша типизированных файлов и множеств для исправления отличий в pcu файлах (#3408)

* Fix cache of typed files, typed sets and short strings clearing

* Delete ShortStringTypes clearing

* Add doc comments

* Return ShortStringTypes clearing in reset method
This commit is contained in:
Александр Земляк 2026-04-09 09:46:26 +03:00 committed by GitHub
parent 60799b031b
commit cda2ab0097
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 25 additions and 4 deletions

View file

@ -293,6 +293,18 @@ namespace PascalABCCompiler.TreeConverter
return false;
}
/// <summary>
/// Очистка переменных перед компиляцией интерфейсной или имплементационной части модуля
/// </summary>
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;

View file

@ -178,7 +178,10 @@ namespace PascalABCCompiler.TreeConverter
/// <summary>
/// Можно переопределять для добавления действий перед конвертацией интерфейсной и имплементационной частей
/// </summary>
public virtual void BeforeCompilationActions() { }
public virtual void BeforeCompilationActions()
{
ResetBeforeModuleCompilation();
}
/// <summary>
/// Можно переопределять для добавления действий после конвертации интерфейсной и имплементационной частей
@ -659,6 +662,14 @@ namespace PascalABCCompiler.TreeConverter
}
}
/// <summary>
/// Очистка переменных перед компиляцией интерфейсной или имплементационной части модуля
/// </summary>
private void ResetBeforeModuleCompilation()
{
context.ResetBeforeModuleCompilation();
}
public void Reset()
{
_system_unit = null;