diff --git a/Compiler/Compiler.csproj b/Compiler/Compiler.csproj index a4f355944..3796bd0e0 100644 --- a/Compiler/Compiler.csproj +++ b/Compiler/Compiler.csproj @@ -142,10 +142,6 @@ {613E0DDA-AA8A-437C-AC45-507B47429FF9} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - - {4d36d4ce-56fd-4bec-b846-d54b3a39ffd5} - StandardSyntaxTreeConverter - {f10a5330-dcf4-4533-877c-7b1b1be23884} SyntaxTreeConverters diff --git a/PascalABCNET.axml b/PascalABCNET.axml index cf3345811..0fb00bb55 100644 --- a/PascalABCNET.axml +++ b/PascalABCNET.axml @@ -1274,6 +1274,29 @@ + + \TreeConverter\TreeConversion\syntax_tree_visitor.cs + Обработка auto_type в assign_node + if (to.type is auto_type) + + public override void visit ( SyntaxTree . assign _assign ) + public partial class syntax_tree_visitor : SyntaxTree . WalkingVisitorNew + namespace PascalABCCompiler . TreeConverter + + + + + + \TreeConverter\TreeConversion\syntax_tree_visitor.cs + public override void visit(SyntaxTree.yield_unknown_expression_type _unk_expr) + + public override void visit ( SyntaxTree . yield_unknown_expression_type _unk_expr ) + public partial class syntax_tree_visitor : SyntaxTree . WalkingVisitorNew + namespace PascalABCCompiler . TreeConverter + + + + @@ -1391,6 +1414,20 @@ + + \standardsyntaxtreeconverter\standardsyntaxconverter.cs + + public class StandardSyntaxTreeConverter : ISyntaxTreeConverter + namespace PascalABCCompiler . SyntaxTreeConverters + + + + + public string Name + = + public syntax_tree_node Convert ( syntax_tree_node root ) + + \Compiler\Compiler.cs CurrentUnit.SyntaxTree = syntaxTreeConvertersController.Convert(CurrentUnit.SyntaxTree) as SyntaxTree.compilation_unit; @@ -1449,20 +1486,6 @@ public syntax_tree_node Convert ( syntax_tree_node root ) - - \standardsyntaxtreeconverter\standardsyntaxconverter.cs - - public class StandardSyntaxTreeConverter : ISyntaxTreeConverter - namespace PascalABCCompiler . SyntaxTreeConverters - - - - - public string Name - = - public syntax_tree_node Convert ( syntax_tree_node root ) - - diff --git a/PascalABCNET.sln b/PascalABCNET.sln index 1d477cfa9..90b9fb39f 100644 --- a/PascalABCNET.sln +++ b/PascalABCNET.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 -VisualStudioVersion = 14.0.25123.0 +VisualStudioVersion = 14.0.25420.1 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "VisualPascalABCNET", "VisualPascalABCNET", "{26843C5D-9D7E-4C2C-AC14-2D227FA5592E}" EndProject @@ -101,8 +101,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SyntaxVisitors", "SyntaxVis EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YieldConversionSyntax", "Yield\YieldConversionSyntax\YieldConversionSyntax.csproj", "{276EE073-60F6-46D2-8811-1B8026BCAADA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StandardSyntaxTreeConverter", "StandardSyntaxTreeConverter\StandardSyntaxTreeConverter.csproj", "{4D36D4CE-56FD-4BEC-B846-D54B3A39FFD5}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -455,18 +453,6 @@ Global {276EE073-60F6-46D2-8811-1B8026BCAADA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {276EE073-60F6-46D2-8811-1B8026BCAADA}.Release|Mixed Platforms.Build.0 = Release|Any CPU {276EE073-60F6-46D2-8811-1B8026BCAADA}.Release|x86.ActiveCfg = Release|Any CPU - {4D36D4CE-56FD-4BEC-B846-D54B3A39FFD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4D36D4CE-56FD-4BEC-B846-D54B3A39FFD5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4D36D4CE-56FD-4BEC-B846-D54B3A39FFD5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {4D36D4CE-56FD-4BEC-B846-D54B3A39FFD5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {4D36D4CE-56FD-4BEC-B846-D54B3A39FFD5}.Debug|x86.ActiveCfg = Debug|Any CPU - {4D36D4CE-56FD-4BEC-B846-D54B3A39FFD5}.Debug|x86.Build.0 = Debug|Any CPU - {4D36D4CE-56FD-4BEC-B846-D54B3A39FFD5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4D36D4CE-56FD-4BEC-B846-D54B3A39FFD5}.Release|Any CPU.Build.0 = Release|Any CPU - {4D36D4CE-56FD-4BEC-B846-D54B3A39FFD5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {4D36D4CE-56FD-4BEC-B846-D54B3A39FFD5}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {4D36D4CE-56FD-4BEC-B846-D54B3A39FFD5}.Release|x86.ActiveCfg = Release|Any CPU - {4D36D4CE-56FD-4BEC-B846-D54B3A39FFD5}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -509,6 +495,5 @@ Global {CE5C55C2-A11C-4E94-A9FA-3FC6CA3E4C09} = {F8CE2712-826B-450B-A72F-D32D80C99858} {A9AB4282-83B4-41A7-86C3-E5BF6A45E7E2} = {F8CE2712-826B-450B-A72F-D32D80C99858} {276EE073-60F6-46D2-8811-1B8026BCAADA} = {F8CE2712-826B-450B-A72F-D32D80C99858} - {4D36D4CE-56FD-4BEC-B846-D54B3A39FFD5} = {F8CE2712-826B-450B-A72F-D32D80C99858} EndGlobalSection EndGlobal diff --git a/StandardSyntaxTreeConverter/Properties/AssemblyInfo.cs b/StandardSyntaxTreeConverter/Properties/AssemblyInfo.cs deleted file mode 100644 index 777a02981..000000000 --- a/StandardSyntaxTreeConverter/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// Управление общими сведениями о сборке осуществляется с помощью -// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения, -// связанные со сборкой. -[assembly: AssemblyTitle("StandardSyntaxTreeConverter")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("StandardSyntaxTreeConverter")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Параметр ComVisible со значением FALSE делает типы в сборке невидимыми -// для COM-компонентов. Если требуется обратиться к типу в этой сборке через -// COM, задайте атрибуту ComVisible значение TRUE для этого типа. -[assembly: ComVisible(false)] - -// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM -[assembly: Guid("4d36d4ce-56fd-4bec-b846-d54b3a39ffd5")] - -// Сведения о версии сборки состоят из следующих четырех значений: -// -// Основной номер версии -// Дополнительный номер версии -// Номер сборки -// Редакция -// -// Можно задать все значения или принять номера сборки и редакции по умолчанию -// используя "*", как показано ниже: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/StandardSyntaxTreeConverter/StandOutExprWithLambdaInForeachSequenceVisitor.cs b/StandardSyntaxTreeConverter/StandOutExprWithLambdaInForeachSequenceVisitor.cs deleted file mode 100644 index b8acd68fc..000000000 --- a/StandardSyntaxTreeConverter/StandOutExprWithLambdaInForeachSequenceVisitor.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using PascalABCCompiler.SyntaxTree; - -public class StandOutExprWithLambdaInForeachSequenceVisitor : BaseChangeVisitor -{ - public static StandOutExprWithLambdaInForeachSequenceVisitor New - { - get - { - return new StandOutExprWithLambdaInForeachSequenceVisitor(); - } - } - - private int GenIdNum = 0; - public ident GenIdentName() - { - GenIdNum++; - return new ident("$GenContFE" + GenIdNum.ToString()); - } - - public override void visit(foreach_stmt fe) - { - if (fe.in_what.DescendantNodes().OfType().Count()>0) - { - var id = GenIdentName(); - id.Parent = fe; - var ass = new var_statement(id, fe.in_what, fe.in_what.source_context); - fe.in_what = id; - var l = new List { ass,fe }; - ReplaceStatement(fe, l); - } - - base.visit(fe); - } - -} diff --git a/StandardSyntaxTreeConverter/StandardSyntaxTreeConverter.csproj b/StandardSyntaxTreeConverter/StandardSyntaxTreeConverter.csproj deleted file mode 100644 index ab4904d53..000000000 --- a/StandardSyntaxTreeConverter/StandardSyntaxTreeConverter.csproj +++ /dev/null @@ -1,72 +0,0 @@ - - - - - Debug - AnyCPU - {4D36D4CE-56FD-4BEC-B846-D54B3A39FFD5} - Library - Properties - StandardSyntaxTreeConverter - StandardSyntaxTreeConverter - v4.0 - 512 - - - true - full - false - ..\bin\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - {f10a5330-dcf4-4533-877c-7b1b1be23884} - SyntaxTreeConverters - - - {c2cac65a-b2ae-4ccc-b067-e6b8e75df73a} - SyntaxTree - - - {a9ab4282-83b4-41a7-86c3-e5bf6a45e7e2} - SyntaxVisitors - - - {276ee073-60f6-46d2-8811-1b8026bcaada} - YieldConversionSyntax - - - - - \ No newline at end of file diff --git a/SyntaxTree/tree/Tree.cs b/SyntaxTree/tree/Tree.cs index 817c918a5..4c4b8a588 100644 --- a/SyntaxTree/tree/Tree.cs +++ b/SyntaxTree/tree/Tree.cs @@ -37854,7 +37854,7 @@ namespace PascalABCCompiler.SyntaxTree /// - ///Узел для вычисления типа выражения используемого в теле функции-итератора (с yield) + ///Узел для вычисления типа выражения используемого в теле функции-итератора (с yield). Используется для описаний всех переменных с автовыводом типов в теле yield: например, для var a := 1; Дело в том, что эти переменные становятся полями класса, а для описания полей класса нужен тип /// [Serializable] public partial class yield_unknown_expression_type : type_definition diff --git a/SyntaxTree/tree/tree.nin b/SyntaxTree/tree/tree.nin index facd12418..895c737c9 100644 Binary files a/SyntaxTree/tree/tree.nin and b/SyntaxTree/tree/tree.nin differ diff --git a/SyntaxTreeConverters/AddStandardSyntaxConverters.cs b/SyntaxTreeConverters/AddStandardSyntaxConverters.cs new file mode 100644 index 000000000..cbe5ecb55 --- /dev/null +++ b/SyntaxTreeConverters/AddStandardSyntaxConverters.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace PascalABCCompiler.SyntaxTreeConverters +{ + + class StandardSyntaxConverters: ISyntaxTreeConverter + { + public string Name { get; } = "Standard"; + public syntax_tree_node Convert(syntax_tree_node root) + { + //var v = new SampleVisitor(); + //v.ProcessNode(root); + return root; + } + } +} diff --git a/SyntaxTreeConverters/StandOutExprWithLambdaInForeachSequenceVisitor.cs b/SyntaxTreeConverters/StandOutExprWithLambdaInForeachSequenceVisitor.cs new file mode 100644 index 000000000..31e46b73b --- /dev/null +++ b/SyntaxTreeConverters/StandOutExprWithLambdaInForeachSequenceVisitor.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using PascalABCCompiler.SyntaxTree; + +namespace PascalABCCompiler.SyntaxTreeConverters +{ + public class StandOutExprWithLambdaInForeachSequenceVisitor : BaseChangeVisitor + { + public static StandOutExprWithLambdaInForeachSequenceVisitor New + { + get + { + return new StandOutExprWithLambdaInForeachSequenceVisitor(); + } + } + + private int GenIdNum = 0; + public ident GenIdentName() + { + GenIdNum++; + return new ident("$GenContFE" + GenIdNum.ToString()); + } + + public override void visit(foreach_stmt fe) + { + if (fe.in_what.DescendantNodes().OfType().Count() > 0) + { + var id = GenIdentName(); + id.Parent = fe; + var ass = new var_statement(id, fe.in_what, fe.in_what.source_context); + fe.in_what = id; + var l = new List { ass, fe }; + ReplaceStatement(fe, l); + } + + base.visit(fe); + } + } +} diff --git a/StandardSyntaxTreeConverter/StandardSyntaxConverter.cs b/SyntaxTreeConverters/StandardSyntaxConverter.cs similarity index 95% rename from StandardSyntaxTreeConverter/StandardSyntaxConverter.cs rename to SyntaxTreeConverters/StandardSyntaxConverter.cs index 667ae6e87..750dd5735 100644 --- a/StandardSyntaxTreeConverter/StandardSyntaxConverter.cs +++ b/SyntaxTreeConverters/StandardSyntaxConverter.cs @@ -32,10 +32,9 @@ namespace PascalABCCompiler.SyntaxTreeConverters SliceDesugarVisitor.New.ProcessNode(root); // Всё, связанное с yield - root.visit(new MarkMethodHasYieldAndCheckSomeErrorsVisitor()); + MarkMethodHasYieldAndCheckSomeErrorsVisitor.New.ProcessNode(root); ProcessYieldCapturedVarsVisitor.New.ProcessNode(root); - return root; } } diff --git a/SyntaxTreeConverters/SyntaxTreeConverters.csproj b/SyntaxTreeConverters/SyntaxTreeConverters.csproj index d4200606f..ee4cd8d6f 100644 --- a/SyntaxTreeConverters/SyntaxTreeConverters.csproj +++ b/SyntaxTreeConverters/SyntaxTreeConverters.csproj @@ -36,6 +36,8 @@ + + @@ -50,6 +52,10 @@ {c2cac65a-b2ae-4ccc-b067-e6b8e75df73a} SyntaxTree + + {a9ab4282-83b4-41a7-86c3-e5bf6a45e7e2} + SyntaxVisitors +