From 735f69214175adc07e031eabc5ef42d76edb6509 Mon Sep 17 00:00:00 2001 From: miks1965 Date: Fri, 15 Jul 2016 20:56:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=B2?= =?UTF-8?q?=20yield=20=D0=B2=D0=B8=D0=B7=D0=B8=D1=82=D0=BE=D1=80=D0=B0?= =?UTF-8?q?=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Configuration/GlobalAssemblyInfo.cs | 2 +- Configuration/Version.defs | 4 +- PascalABCNET.axml | 2 +- ReleaseGenerators/PascalABCNET_version.nsh | 2 +- TestSuite/CompilationSamples/PT4.pas | 2 +- TestSuite/yield_capture_field_base_class.pas | 20 +++++++ .../UniversalVisitors/AddBeginEndsVisitor.cs | 10 ++++ .../DeleteRedundantBeginEnds.cs | 12 ++++ .../YieldVisitors/DeleteAllLocalDefs.cs | 16 +++++- .../LocalVariablesTypeDetectorHelperVisior.cs | 8 +-- .../ProcessYieldsCapturedVars.cs | 53 +++++++++--------- .../RenameSameBlockLocalVarsVisitor.cs | 10 ++++ .../ReplaceCapturedVariablesVisitor.cs | 2 +- .../ReplaceYieldWithLamdasVisitor.cs | 10 ++++ .../YieldDesugarSyntaxTreeConverter.cs | 2 +- bin/Lib/PABCRtl.dll | Bin 507904 -> 507904 bytes 16 files changed, 113 insertions(+), 42 deletions(-) create mode 100644 TestSuite/yield_capture_field_base_class.pas diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index aff13ffd8..3066d4b98 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "1"; public const string Build = "0"; - public const string Revision = "1269"; + public const string Revision = "1270"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index 7008504df..754666808 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ -%COREVERSION%=0 -%REVISION%=1269 %MINOR%=1 +%REVISION%=1270 +%COREVERSION%=0 %MAJOR%=3 diff --git a/PascalABCNET.axml b/PascalABCNET.axml index 18ef91e0f..56741fd2e 100644 --- a/PascalABCNET.axml +++ b/PascalABCNET.axml @@ -318,7 +318,7 @@ - + \treeconverter\treeconversion\syntax_tree_visitor.cs diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index fff479009..7c9c94a70 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.1.0.1269' +!define VERSION '3.1.0.1270' diff --git a/TestSuite/CompilationSamples/PT4.pas b/TestSuite/CompilationSamples/PT4.pas index fe5e8e1e0..a52af2aa7 100644 --- a/TestSuite/CompilationSamples/PT4.pas +++ b/TestSuite/CompilationSamples/PT4.pas @@ -1,5 +1,5 @@ /// Модуль электронного задачника Programming Taskbook 4 -unit PT4; +unit PT4; //------------------------------------------------------------------------------ // Модуль для подключения задачника Programming Taskbook diff --git a/TestSuite/yield_capture_field_base_class.pas b/TestSuite/yield_capture_field_base_class.pas new file mode 100644 index 000000000..7513c4e2d --- /dev/null +++ b/TestSuite/yield_capture_field_base_class.pas @@ -0,0 +1,20 @@ +type + X = class + v := 2; + end; + +var v := 666; + +type + A = class(X) + function f: sequence of integer; + begin + var a := 1; + yield a+v; + end; + end; + +begin + var a1 := new A; + Assert(a1.f.Print.SequenceEqual(Seq(3))); +end. \ No newline at end of file diff --git a/Yield/SyntaxVisitors/UniversalVisitors/AddBeginEndsVisitor.cs b/Yield/SyntaxVisitors/UniversalVisitors/AddBeginEndsVisitor.cs index a04bf958f..ccea1b1a6 100644 --- a/Yield/SyntaxVisitors/UniversalVisitors/AddBeginEndsVisitor.cs +++ b/Yield/SyntaxVisitors/UniversalVisitors/AddBeginEndsVisitor.cs @@ -12,6 +12,16 @@ namespace SyntaxVisitors { public class AddBeginEndsVisitor : BaseChangeVisitor { + public static AddBeginEndsVisitor New + { + get { return new AddBeginEndsVisitor(); } + } + + public static void Accept(procedure_definition pd) + { + New.ProcessNode(pd); + } + public override void Exit(syntax_tree_node st) { var sts = st as statement; diff --git a/Yield/SyntaxVisitors/UniversalVisitors/DeleteRedundantBeginEnds.cs b/Yield/SyntaxVisitors/UniversalVisitors/DeleteRedundantBeginEnds.cs index f77116c23..44211a346 100644 --- a/Yield/SyntaxVisitors/UniversalVisitors/DeleteRedundantBeginEnds.cs +++ b/Yield/SyntaxVisitors/UniversalVisitors/DeleteRedundantBeginEnds.cs @@ -12,6 +12,18 @@ namespace SyntaxVisitors { public class DeleteRedundantBeginEnds : BaseChangeVisitor { + public static DeleteRedundantBeginEnds New + { + get { return new DeleteRedundantBeginEnds(); } + } + + public static DeleteRedundantBeginEnds Accept(procedure_definition pd) + { + var n = New; + n.ProcessNode(pd); + return n; + } + public override void Exit(syntax_tree_node st) { var stl = st as statement_list; diff --git a/Yield/SyntaxVisitors/YieldVisitors/DeleteAllLocalDefs.cs b/Yield/SyntaxVisitors/YieldVisitors/DeleteAllLocalDefs.cs index d73e99c30..a47b01f74 100644 --- a/Yield/SyntaxVisitors/YieldVisitors/DeleteAllLocalDefs.cs +++ b/Yield/SyntaxVisitors/YieldVisitors/DeleteAllLocalDefs.cs @@ -9,7 +9,7 @@ using PascalABCCompiler.SyntaxTree; namespace SyntaxVisitors { - public class DeleteAllLocalDefs : BaseChangeVisitor + public class MoveAllLocalDefsToLists : BaseChangeVisitor { private List LocalDeletedVD = new List(); // все локальные описания @@ -28,10 +28,22 @@ namespace SyntaxVisitors } } - public DeleteAllLocalDefs() // надо запускать этот визитор начиная с корня подпрограммы + public MoveAllLocalDefsToLists() // надо запускать этот визитор начиная с корня подпрограммы { } + public static MoveAllLocalDefsToLists New + { + get { return new MoveAllLocalDefsToLists(); } + } + + public static MoveAllLocalDefsToLists Accept(procedure_definition pd) + { + var n = New; + n.ProcessNode(pd); + return n; + } + public override void visit(var_statement vs) // локальные описания внутри процедуры { LocalDeletedVS.Insert(0, vs.var_def); diff --git a/Yield/SyntaxVisitors/YieldVisitors/LocalVariablesTypeDetectorHelperVisior.cs b/Yield/SyntaxVisitors/YieldVisitors/LocalVariablesTypeDetectorHelperVisior.cs index e452cf4c0..3d6326ebc 100644 --- a/Yield/SyntaxVisitors/YieldVisitors/LocalVariablesTypeDetectorHelperVisior.cs +++ b/Yield/SyntaxVisitors/YieldVisitors/LocalVariablesTypeDetectorHelperVisior.cs @@ -12,9 +12,9 @@ namespace SyntaxVisitors { public class LocalVariablesTypeDetectorHelperVisior : BaseChangeVisitor { - public List LocalDeletedDefs = new List(); // все локальные описания + public List LocalDeletedDefs = new List(); // variable_definitions - описания до начала блока - public List LocalDeletedVS = new List(); // var_statement's, потом объединим с LocalDeletedVD для верного порядка + public List LocalDeletedVS = new List(); // var_statement's - внутриблочные описания public LocalVariablesTypeDetectorHelperVisior() { @@ -30,7 +30,7 @@ namespace SyntaxVisitors LocalDeletedVS.Insert(0, vs.var_def); - ReplaceStatement(vs, new yield_var_def_statement_with_unknown_type(vs.var_def)); + //ReplaceStatement(vs, new yield_var_def_statement_with_unknown_type(vs.var_def)); } public override void visit(variable_definitions vd) @@ -40,7 +40,7 @@ namespace SyntaxVisitors LocalDeletedDefs.Insert(0, v); } - Replace(vd, new yield_variable_definitions_with_unknown_type(vd)); + //Replace(vd, new yield_variable_definitions_with_unknown_type(vd)); // еще - не заходить в лямбды } diff --git a/Yield/SyntaxVisitors/YieldVisitors/ProcessYieldsCapturedVars.cs b/Yield/SyntaxVisitors/YieldVisitors/ProcessYieldsCapturedVars.cs index 855f3c2e4..1837af858 100644 --- a/Yield/SyntaxVisitors/YieldVisitors/ProcessYieldsCapturedVars.cs +++ b/Yield/SyntaxVisitors/YieldVisitors/ProcessYieldsCapturedVars.cs @@ -81,8 +81,8 @@ namespace SyntaxVisitors type_declarations GenClassesForYield(procedure_definition pd, IEnumerable fields, // локальные переменные IDictionary localsMap, // отображение для захваченных имен локальных переменных - IDictionary formalParamsMap, // отображение для захваченных имен формальных параметров - IDictionary localsCloneMap // отображение для оберток локальных переменных + IDictionary formalParamsMap//, // отображение для захваченных имен формальных параметров + //IDictionary localsCloneMap // отображение для оберток локальных переменных ) { var fh = (pd.proc_header as function_header); @@ -104,7 +104,7 @@ namespace SyntaxVisitors if (vds.inital_value != null) { //return new var_def_statement(ids, new yield_unknown_expression_type(localsCloneMap[vds], varsTypeDetectorHelper), null); - return new var_def_statement(ids, new yield_unknown_expression_type(localsCloneMap[vds]), null); + return new var_def_statement(ids, new yield_unknown_expression_type(vds), null); // SSM - убрал localsCloneMap[vds] - заменил на vds - не знаю, зачем вообще это отображение делалось - всё равно оно было тождественным!!! } else { @@ -606,7 +606,7 @@ namespace SyntaxVisitors /// /// Объявление метода /// Коллекция посещенных локальных переменных - private void CreateLocalVariablesTypeProxies(procedure_definition pd, out IEnumerable localsClonesCollection) + /*private void CreateLocalVariablesTypeProxies(procedure_definition pd, out IEnumerable localsClonesCollection) { // Выполняем определение типов локальных переменных с автовыводом типов @@ -631,8 +631,8 @@ namespace SyntaxVisitors // frninja 05/06/16 - фиксим source_context pd.proc_header.name.meth_name.source_context); // = new method_name("" + pd.proc_header.className.meth_name.className); - //InsertHelperMethod(pd, pdCloned); // SSM 13.07.16 - вызов этого метода можно не добавлять - } + InsertHelperMethod(pd, pdCloned); // SSM 13.07.16 - вызов этого метода можно не добавлять + }*/ /// /// Отображение локальных в клонированные локальные @@ -640,7 +640,7 @@ namespace SyntaxVisitors /// Откуда /// Куда /// Отображение - private Dictionary CreateLocalsClonesMap(IEnumerable from, IEnumerable to) + /*private Dictionary CreateLocalsClonesMap(IEnumerable from, IEnumerable to) { // Нужно тк клонировали метод для создания хелпера-определителя типов локальных переменных - Eq не будет работать @@ -657,7 +657,7 @@ namespace SyntaxVisitors } return localsClonesMap; - } + }*/ @@ -890,11 +890,12 @@ namespace SyntaxVisitors // frninja 05/06/16 - вставляем предописание если метод-итератор описан не в классе (обычная функция) чтоб работали рекурсивные вызовы + // SSM - это приводит к ошибке в случае метода расширения. Простое решение - не вызывать это если это - метод расширения. + // SSM - но лучше конечно выдавать более достойное сообщение об ошибке или решить эту проблему bool methodPredefCreated = InsertGlobalIteratorMethodPredefinition(pd); // frninja 24/05/16 - оборачиваем одиночные операторы в begin..end - AddBeginEndsVisitor addBeginEndsVis = new AddBeginEndsVisitor(); - pd.visit(addBeginEndsVis); + AddBeginEndsVisitor.Accept(pd); /* // Проверяем проблемы имен для for @@ -908,35 +909,32 @@ namespace SyntaxVisitors pd.visit(checkVarRedefVisitor); */ - // Переименовываем одинаковые имена в мини-ПИ - RenameSameBlockLocalVarsVisitor renameLocalsVisitor = new RenameSameBlockLocalVarsVisitor(); - pd.visit(renameLocalsVisitor); - - ReplaceYieldWithLamdasVisitor replaceYieldWithLabdaVis = new ReplaceYieldWithLamdasVisitor(); - pd.visit(replaceYieldWithLabdaVis); - // frninja 31/05/16 - добавляем метод-хелпер, возьмет на себя проверку разных ошибок уже существующим бэкендом - CreateErrorCheckerHelper(pd); + CreateErrorCheckerHelper(pd); // SSM 14/07/16 - переставил до переименования переменных чтобы отлавливались ошибки одинаковых имен в разных пространствах имен + // SSM - можно сделать спец визитор, который бы отлавливал дубли имен - тогда этого не надо + + // Переименовываем одинаковые имена в мини-ПИ: begin var a := 1 end; begin var a := 1 end; + RenameSameBlockLocalVarsVisitor.Accept(pd); + + // Выносим выражение с лямбдой из yield + ReplaceYieldWithLamdasVisitor.Accept(pd); // Теперь lowering LoweringVisitor.Accept(pd); // frninja 13/04/16 - убираем лишние begin..end - DeleteRedundantBeginEnds deleteBeginEndVisitor = new DeleteRedundantBeginEnds(); - pd.visit(deleteBeginEndVisitor); + DeleteRedundantBeginEnds.Accept(pd); // Обработка метода для корректного захвата локальных переменных и их типов - IEnumerable localsClonesCollection; - CreateLocalVariablesTypeProxies(pd, out localsClonesCollection); - + //IEnumerable localsClonesCollection; + //CreateLocalVariablesTypeProxies(pd, out localsClonesCollection); // frninja 16/11/15: перенес ниже чтобы работал захват для lowered for - var dld = new DeleteAllLocalDefs(); // mids.vars - все захваченные переменные - pd.visit(dld); // Удалить в локальных и блочных описаниях этой процедуры все переменные и вынести их в отдельный список var_def_statement + var dld = MoveAllLocalDefsToLists.Accept(pd); // Удалить в локальных и блочных описаниях этой процедуры все переменные и вынести их в отдельный список var_def_statement // Строим отображение из локальных переменных клона оригинального метода в локальные переменные основного метода - Dictionary localsCloneMap = CreateLocalsClonesMap(dld.LocalDeletedDefs, localsClonesCollection); + //Dictionary localsCloneMap = CreateLocalsClonesMap(dld.LocalDeletedDefs, localsClonesCollection); // frninja 08/12/15 @@ -945,7 +943,6 @@ namespace SyntaxVisitors IDictionary CapturedFormalParamsNamesMap; ReplaceCapturedVariables(pd, dld.LocalDeletedDefs, out CapturedLocalsNamesMap, out CapturedFormalParamsNamesMap); - //mids.vars.Except(dld.LocalDeletedDefsNames); // параметры остались. Их тоже надо исключать - они и так будут обработаны // В результате работы в mids.vars что-то осталось. Это не локальные переменные и с ними непонятно что делать @@ -958,7 +955,7 @@ namespace SyntaxVisitors (pd.proc_body as block).program_code = cfa.res; // Конструируем определение класса - var cct = GenClassesForYield(pd, dld.LocalDeletedDefs, CapturedLocalsNamesMap, CapturedFormalParamsNamesMap, localsCloneMap); // все удаленные описания переменных делаем описанием класса + var cct = GenClassesForYield(pd, dld.LocalDeletedDefs, CapturedLocalsNamesMap, CapturedFormalParamsNamesMap/*, localsCloneMap*/); // все удаленные описания переменных делаем описанием класса // Вставляем классы-хелперы InsertYieldHelpers(pd, cct); diff --git a/Yield/SyntaxVisitors/YieldVisitors/RenameSameBlockLocalVarsVisitor.cs b/Yield/SyntaxVisitors/YieldVisitors/RenameSameBlockLocalVarsVisitor.cs index 06d67e34b..8e2ac9921 100644 --- a/Yield/SyntaxVisitors/YieldVisitors/RenameSameBlockLocalVarsVisitor.cs +++ b/Yield/SyntaxVisitors/YieldVisitors/RenameSameBlockLocalVarsVisitor.cs @@ -28,6 +28,16 @@ namespace SyntaxVisitors this.BlockNamesCounter = new Dictionary(); } + public static RenameSameBlockLocalVarsVisitor New + { + get { return new RenameSameBlockLocalVarsVisitor(); } + } + + public static void Accept(procedure_definition pd) + { + New.ProcessNode(pd); + } + public override void visit(declarations decls) { // Для обхода в правильном порядке сверху вниз diff --git a/Yield/SyntaxVisitors/YieldVisitors/ReplaceCapturedVariablesVisitor.cs b/Yield/SyntaxVisitors/YieldVisitors/ReplaceCapturedVariablesVisitor.cs index 31af3a855..e09443890 100644 --- a/Yield/SyntaxVisitors/YieldVisitors/ReplaceCapturedVariablesVisitor.cs +++ b/Yield/SyntaxVisitors/YieldVisitors/ReplaceCapturedVariablesVisitor.cs @@ -69,7 +69,7 @@ namespace SyntaxVisitors // frninja 12/05/16 - фикс для yield_unknown_ident public override void visit(yield_unknown_ident unk) { - yield_var_def_statement_with_unknown_type x; + //yield_var_def_statement_with_unknown_type x; // Empty } diff --git a/Yield/SyntaxVisitors/YieldVisitors/ReplaceYieldWithLamdasVisitor.cs b/Yield/SyntaxVisitors/YieldVisitors/ReplaceYieldWithLamdasVisitor.cs index 18c62cded..9d597bf57 100644 --- a/Yield/SyntaxVisitors/YieldVisitors/ReplaceYieldWithLamdasVisitor.cs +++ b/Yield/SyntaxVisitors/YieldVisitors/ReplaceYieldWithLamdasVisitor.cs @@ -20,6 +20,16 @@ namespace SyntaxVisitors return new ident("$lambdaVar$" + _lambdaNum); } + public static ReplaceYieldWithLamdasVisitor New + { + get { return new ReplaceYieldWithLamdasVisitor(); } + } + + public static void Accept(procedure_definition pd) + { + New.ProcessNode(pd); + } + public override void visit(yield_node yn) { var lambdaSearcher = new TreeConverter.LambdaExpressions.LambdaSearcher(yn); diff --git a/Yield/YieldConversionSyntax/YieldDesugarSyntaxTreeConverter.cs b/Yield/YieldConversionSyntax/YieldDesugarSyntaxTreeConverter.cs index 52e36e6d4..fa879733d 100644 --- a/Yield/YieldConversionSyntax/YieldDesugarSyntaxTreeConverter.cs +++ b/Yield/YieldConversionSyntax/YieldDesugarSyntaxTreeConverter.cs @@ -28,7 +28,7 @@ namespace YieldDesugarSyntaxTreeConverter root.visit(new ProcessYieldCapturedVarsVisitor()); #if DEBUG - //root.visit(new SimplePrettyPrinterVisitor(@"d:\zzz.txt")); + root.visit(new SimplePrettyPrinterVisitor(@"d:\zzz.txt")); #endif return root; diff --git a/bin/Lib/PABCRtl.dll b/bin/Lib/PABCRtl.dll index 6d000e76d70ff155e8d1fc137b15172d5a92ea76..a6968f59ac176d95517a22306a7a34446b9b73e7 100644 GIT binary patch delta 42272 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