diff --git a/Compiler/SyntaxTreeConvertersController/SyntaxTreeConvertersController.cs b/Compiler/SyntaxTreeConvertersController/SyntaxTreeConvertersController.cs index 03513c023..df2aa2fa9 100644 --- a/Compiler/SyntaxTreeConvertersController/SyntaxTreeConvertersController.cs +++ b/Compiler/SyntaxTreeConvertersController/SyntaxTreeConvertersController.cs @@ -50,7 +50,7 @@ namespace PascalABCCompiler.SyntaxTreeConverters private void AddExternalConvertersAsPlugins(string DirectoryName) { DirectoryInfo di = new DirectoryInfo(DirectoryName); - List dllfiles = di.GetFiles("*ConversionSyntax.dll").ToList(); // Это только YieldConversionSyntax.dll + List dllfiles = di.GetFiles("*ConversionSyntaxExternal.dll").ToList(); // Это только YieldConversionSyntax.dll //List standartdllfile = di.GetFiles("StandardSyntaxTreeConverter.dll").ToList(); //if (standartdllfile.Count>0) // dllfiles.Insert(0, standartdllfile[0]); diff --git a/StandardSyntaxTreeConverter/StandOutExprWithLambdaInForeachSequenceConverter.cs b/StandardSyntaxTreeConverter/StandOutExprWithLambdaInForeachSequenceVisitor.cs similarity index 100% rename from StandardSyntaxTreeConverter/StandOutExprWithLambdaInForeachSequenceConverter.cs rename to StandardSyntaxTreeConverter/StandOutExprWithLambdaInForeachSequenceVisitor.cs diff --git a/StandardSyntaxTreeConverter/StandardSyntaxConverter.cs b/StandardSyntaxTreeConverter/StandardSyntaxConverter.cs index 3aaa415d3..f33eee345 100644 --- a/StandardSyntaxTreeConverter/StandardSyntaxConverter.cs +++ b/StandardSyntaxTreeConverter/StandardSyntaxConverter.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using PascalABCCompiler.SyntaxTree; +using SyntaxVisitors; namespace PascalABCCompiler.SyntaxTreeConverters { @@ -12,10 +13,16 @@ namespace PascalABCCompiler.SyntaxTreeConverters public syntax_tree_node Convert(syntax_tree_node root) { // Прошивание ссылками на Parent nodes. Должно идти первым + // FillParentNodeVisitor расположен в SyntaxTree/tree как базовый визитор, отвечающий за построение дерева FillParentNodeVisitor.New.ProcessNode(root); // Выносим выражения с лямбдами из заголовка foreach - StandOutExprWithLambdaInForeachSequenceVisitor.New.ProcessNode(root); + StandOutExprWithLambdaInForeachSequenceVisitor.New.ProcessNode(root); + + // Всё, связанное с yield + root.visit(new MarkMethodHasYieldAndCheckSomeErrorsVisitor()); + ProcessYieldCapturedVarsVisitor.New.ProcessNode(root); + return root; } diff --git a/StandardSyntaxTreeConverter/StandardSyntaxTreeConverter.csproj b/StandardSyntaxTreeConverter/StandardSyntaxTreeConverter.csproj index 81604fcc7..ab4904d53 100644 --- a/StandardSyntaxTreeConverter/StandardSyntaxTreeConverter.csproj +++ b/StandardSyntaxTreeConverter/StandardSyntaxTreeConverter.csproj @@ -41,7 +41,7 @@ - + @@ -52,6 +52,14 @@ {c2cac65a-b2ae-4ccc-b067-e6b8e75df73a} SyntaxTree + + {a9ab4282-83b4-41a7-86c3-e5bf6a45e7e2} + SyntaxVisitors + + + {276ee073-60f6-46d2-8811-1b8026bcaada} + YieldConversionSyntax +