From 1fccb1e103adf3f45ce1877f2f7454b09a75378d Mon Sep 17 00:00:00 2001 From: miks1965 Date: Mon, 10 Aug 2015 11:31:02 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=20=D1=81=20=D0=B2?= =?UTF-8?q?=D0=B8=D0=B7=D0=B8=D1=82=D0=BE=D1=80=D0=B0=D0=BC=D0=B8.=20?= =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20ToStri?= =?UTF-8?q?ng=20=D0=B2=20write.=20=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=D1=8B=20?= =?UTF-8?q?=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D1=8B=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0=D0=BD=D0=B8=D1=8E?= =?UTF-8?q?=20=D0=B8=D0=B7=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B0=20=D1=80?= =?UTF-8?q?=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B5=D0=BD=D0=B8=D1=8F=20Print?= =?UTF-8?q?=20(=D0=BF=D0=BE=D0=BA=D0=B0=20=D1=8D=D1=82=D0=BE=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=B7=D1=8B=D0=B2=D0=B0=D0=B5=D1=82=20=D0=BF=D0=B0=D0=B4?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Configuration/GlobalAssemblyInfo.cs | 2 +- Configuration/Version.defs | 2 +- ReleaseGenerators/PascalABCNET_version.nsh | 2 +- SyntaxTree/tree/NodesBuilder.cs | 13 ++- TestSuite/CompilationSamples/PABCSystem.pas | 46 +++++++++- ...uredVariablesSubstitutionClassGenerator.cs | 8 +- .../Closure/CapturedVariablesSubstitutor.cs | 2 +- _ParsePABC1/ParsePABC1.sln | 4 +- _ParsePABC1/ParsePABC1/App.config | 6 +- .../BaseVisitors/BaseChangeVisitor.cs | 66 +++++++------- .../BaseVisitors/BaseEnterExitVisitor.cs | 2 +- .../BaseVisitors/CollectNamespaces.cs | 4 +- .../BaseVisitors/SmallHelperVisitors.cs | 4 +- _ParsePABC1/ParsePABC1/ChangeWhileVisitor.cs | 40 ++++----- _ParsePABC1/ParsePABC1/DeleteLocalDefs.cs | 23 +---- _ParsePABC1/ParsePABC1/ParsePABC1.csproj | 5 +- .../ParsePABC1/ProcessYieldsCapturedVars.cs | 82 ++++++++---------- _ParsePABC1/ParsePABC1/Program.cs | 59 +++++++------ .../ParsePABC1/SimplePrettyPrinterVisitor.cs | 2 +- _ParsePABC1/f.pas | 4 +- _ParsePABC1/f1.pas | 1 + _ParsePABC1/yield2.pas | 12 +-- bin/Lib/PABCRtl.dll | Bin 479232 -> 479744 bytes bin/Lib/PABCSystem.pas | 24 ++++- 24 files changed, 225 insertions(+), 188 deletions(-) diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index 58103cb67..fb5185c95 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "2"; public const string Minor = "2"; public const string Build = "0"; - public const string Revision = "999"; + public const string Revision = "1001"; 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 2d25cf75d..2f20fd25c 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ %MINOR%=2 -%REVISION%=999 +%REVISION%=1001 %MAJOR%=2 %COREVERSION%=0 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index 84b075d41..f1c06c80d 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '2.2.0.999' \ No newline at end of file +!define VERSION '2.2.0.1001' \ No newline at end of file diff --git a/SyntaxTree/tree/NodesBuilder.cs b/SyntaxTree/tree/NodesBuilder.cs index d5aaaf591..22c53aa6f 100644 --- a/SyntaxTree/tree/NodesBuilder.cs +++ b/SyntaxTree/tree/NodesBuilder.cs @@ -90,7 +90,7 @@ namespace PascalABCCompiler.SyntaxTree return cm; } - public static class_definition BuildClassDefinition(bool is_class, params class_members[] cms) + public static class_definition BuildClassOrRecordDefinition(bool is_class, params class_members[] cms) { var cb = new class_body(); foreach (var cm in cms) @@ -101,6 +101,11 @@ namespace PascalABCCompiler.SyntaxTree return cd; } + public static class_definition BuildClassDefinition(params class_members[] cms) + { + return BuildClassOrRecordDefinition(true,cms); + } + // names и types передаю во внешний мир на предмет анализа того, что они не указатели. Снаружи они инициализируются пустыми списками public static void AddMembersForAutoClass(class_definition cd, ref List names, ref List types) // SSM 24.03.14 { @@ -169,7 +174,7 @@ namespace PascalABCCompiler.SyntaxTree var cm2 = BuildSimpleConstructorSection(names, formnames, types); var cm3 = BuildOneMemberSection(pd); - return new type_declaration(class_name, BuildClassDefinition(true, cm1, cm2, cm3), BuildGenSC); + return new type_declaration(class_name, BuildClassOrRecordDefinition(true, cm1, cm2, cm3), BuildGenSC); } public static type_declaration BuildAutoClass(string class_name, List names, List types, bool is_class) @@ -180,7 +185,7 @@ namespace PascalABCCompiler.SyntaxTree var cm2 = BuildSimpleConstructorSection(fnames,names,types); var cm3 = BuildSimpleReadPropertiesSection(names, fnames, types); - return new type_declaration(class_name, BuildClassDefinition(is_class, cm1, cm2, cm3), BuildGenSC); + return new type_declaration(class_name, BuildClassOrRecordDefinition(is_class, cm1, cm2, cm3), BuildGenSC); } public static type_declaration BuildClassWithFieldsOnly(string class_name, List names, List types, bool is_class) @@ -189,7 +194,7 @@ namespace PascalABCCompiler.SyntaxTree var cm1 = BuildClassFieldsSection(fnames, types); - return new type_declaration(class_name, BuildClassDefinition(is_class, cm1), BuildGenSC); + return new type_declaration(class_name, BuildClassOrRecordDefinition(is_class, cm1), BuildGenSC); } public static procedure_definition BuildShortFuncDefinition(formal_parameters fp, procedure_attributes_list att, method_name name, type_definition result, expression ex, SourceContext headsc) diff --git a/TestSuite/CompilationSamples/PABCSystem.pas b/TestSuite/CompilationSamples/PABCSystem.pas index 40091a97a..e57763bfb 100644 --- a/TestSuite/CompilationSamples/PABCSystem.pas +++ b/TestSuite/CompilationSamples/PABCSystem.pas @@ -2721,6 +2721,26 @@ end; //------------------------------------------------------------------------------ // StructuredObjectToString //------------------------------------------------------------------------------ + +// ToString nil ToString Object +function RedefinedToString(o: object): System.Reflection.MethodInfo; +begin + var t := o.GetType; + var meth: System.Reflection.MethodInfo := nil; + while t<>typeof(Object) do + begin + meth := t.GetMethod('ToString',System.Reflection.BindingFlags.Public or + System.Reflection.BindingFlags.Instance or + System.Reflection.BindingFlags.DeclaredOnly,nil,new System.Type[0],nil); + if meth<>nil then + break; + t := t.BaseType; + end; + if t=typeof(Object) then + Result := nil + else Result := meth; +end; + function ArrNToString(a: System.Array; indexes: array of integer; i: integer): string; forward; function StructuredObjectToString(o: Object; n: integer := 0): string; @@ -2775,7 +2795,7 @@ begin end else begin - var q := o.GetType.GetMethod('ToString',System.Reflection.BindingFlags.Public or System.Reflection.BindingFlags.Instance,nil,new System.Type[0],nil); + var q := RedefinedToString(o); var gg := o.GetType.FullName.StartsWith('System.Tuple'); var gg1 := o.GetType.Name.StartsWith('KeyValuePair'); if (q<>nil) and q.IsVirtual and not gg and not gg1 then @@ -2997,7 +3017,7 @@ end;} // Extension methods for IEnumerable //------------------------------------------------------------------------------ /// , delim -function System.Collections.Generic.IEnumerable.Print(delim: string := ' '): sequence of T; +function System.Collections.Generic.IEnumerable.Print(delim: string): sequence of T; begin var g := Self.GetEnumerator(); if g.MoveNext() then @@ -3007,16 +3027,28 @@ begin Result := Self; end; +/// , +function System.Collections.Generic.IEnumerable.Print(): sequence of T; +begin + Result := Self.Print(' '); +end; + /// , delim , -function System.Collections.Generic.IEnumerable.Println(delim: string := ' '): sequence of T; +function System.Collections.Generic.IEnumerable.Println(delim: string): sequence of T; begin Self.Print(delim); Writeln; Result := Self; end; +/// , , +function System.Collections.Generic.IEnumerable.Println(): sequence of T; +begin + Result := Self.Println(' '); +end; + /// , , delim -function System.Collections.Generic.IEnumerable.JoinIntoString(delim: string := ' '): string; +function System.Collections.Generic.IEnumerable.JoinIntoString(delim: string): string; begin var g := Self.GetEnumerator(); var sb := new System.Text.StringBuilder(''); @@ -3027,6 +3059,12 @@ begin Result := sb.ToString; end; +/// , , +function System.Collections.Generic.IEnumerable.JoinIntoString(): string; +begin + Result := Self.JoinIntoString(' '); +end; + /// procedure System.Collections.Generic.IEnumerable.&ForEach(action: Action); begin diff --git a/TreeConverter/LambdaExpressions/Closure/CapturedVariablesSubstitutionClassGenerator.cs b/TreeConverter/LambdaExpressions/Closure/CapturedVariablesSubstitutionClassGenerator.cs index 814421da5..0b7b0887c 100644 --- a/TreeConverter/LambdaExpressions/Closure/CapturedVariablesSubstitutionClassGenerator.cs +++ b/TreeConverter/LambdaExpressions/Closure/CapturedVariablesSubstitutionClassGenerator.cs @@ -286,7 +286,7 @@ namespace TreeConverter.LambdaExpressions.Closure var nextNodeWhereVarsAreCaptured = upperScopesStack.Pop(); if (!_capturedVarsClassDefs.ContainsKey(nextNodeWhereVarsAreCaptured.ScopeIndex)) { - var classDef = SyntaxTreeBuilder.BuildClassDefinition(true); + var classDef = SyntaxTreeBuilder.BuildClassDefinition(); var typeDeclaration = new type_declaration(GeneratedClassName, classDef); _capturedVarsClassDefs.Add(nextNodeWhereVarsAreCaptured.ScopeIndex, new ScopeClassDefinition( @@ -462,7 +462,7 @@ namespace TreeConverter.LambdaExpressions.Closure { if (!_capturedVarsClassDefs.ContainsKey(scope.ScopeIndex)) { - var classDef = SyntaxTreeBuilder.BuildClassDefinition(true); + var classDef = SyntaxTreeBuilder.BuildClassDefinition(); var typeDeclaration = new type_declaration(GeneratedClassName, classDef); _capturedVarsClassDefs.Add(scope.ScopeIndex, new ScopeClassDefinition( @@ -641,7 +641,7 @@ namespace TreeConverter.LambdaExpressions.Closure { if (!_capturedVarsClassDefs.ContainsKey(currentNode.ScopeIndex)) { - var classDef = SyntaxTreeBuilder.BuildClassDefinition(true); + var classDef = SyntaxTreeBuilder.BuildClassDefinition(); var typeDeclaration = new type_declaration(((CapturedVariablesTreeNodeClassScope)currentNode).ClassName, classDef); _capturedVarsClassDefs.Add(currentNode.ScopeIndex, new ScopeClassDefinition(currentNode.CorrespondingSyntaxTreeNode, @@ -654,7 +654,7 @@ namespace TreeConverter.LambdaExpressions.Closure { if (!_capturedVarsClassDefs.ContainsKey(currentNode.ScopeIndex)) { - var classDef = SyntaxTreeBuilder.BuildClassDefinition(true); + var classDef = SyntaxTreeBuilder.BuildClassDefinition(); var typeDeclaration = new type_declaration(GeneratedClassName, classDef); _capturedVarsClassDefs.Add(currentNode.ScopeIndex, new ScopeClassDefinition(currentNode.CorrespondingSyntaxTreeNode, diff --git a/TreeConverter/LambdaExpressions/Closure/CapturedVariablesSubstitutor.cs b/TreeConverter/LambdaExpressions/Closure/CapturedVariablesSubstitutor.cs index a4064b5fb..521b29071 100644 --- a/TreeConverter/LambdaExpressions/Closure/CapturedVariablesSubstitutor.cs +++ b/TreeConverter/LambdaExpressions/Closure/CapturedVariablesSubstitutor.cs @@ -567,7 +567,7 @@ namespace TreeConverter.LambdaExpressions.Closure private Tuple> CreateTypeDeclarationWithForwardDeclaration(type_declaration cl) { var oldClDef = (class_definition) cl.type_def; - var classDef = SyntaxTreeBuilder.BuildClassDefinition(true); + var classDef = SyntaxTreeBuilder.BuildClassDefinition(); var typeDeclaration = new type_declaration(cl.type_name, classDef); classDef.where_section = oldClDef.where_section; var procedures = new List(); diff --git a/_ParsePABC1/ParsePABC1.sln b/_ParsePABC1/ParsePABC1.sln index 16eaf8ac5..4f80e9bb1 100644 --- a/_ParsePABC1/ParsePABC1.sln +++ b/_ParsePABC1/ParsePABC1.sln @@ -5,9 +5,9 @@ VisualStudioVersion = 12.0.21005.1 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ParsePABC1", "ParsePABC1\ParsePABC1.csproj", "{BAA767F1-6544-4A44-BA17-5FBFCF6F2D99}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SyntaxTree", "..\..\PascalABC.NET\!PABC_Git\SyntaxTree\SyntaxTree.csproj", "{C2CAC65A-B2AE-4CCC-B067-E6B8E75DF73A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SyntaxTree", "..\SyntaxTree\SyntaxTree.csproj", "{C2CAC65A-B2AE-4CCC-B067-E6B8E75DF73A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCompletion", "..\..\PascalABC.NET\!PABC_Git\CodeCompletion\CodeCompletion.csproj", "{1AB15F6E-C22E-499A-A7ED-54BA7DE5CFA6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCompletion", "..\CodeCompletion\CodeCompletion.csproj", "{1AB15F6E-C22E-499A-A7ED-54BA7DE5CFA6}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/_ParsePABC1/ParsePABC1/App.config b/_ParsePABC1/ParsePABC1/App.config index 8e1564635..d1428ad71 100644 --- a/_ParsePABC1/ParsePABC1/App.config +++ b/_ParsePABC1/ParsePABC1/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/_ParsePABC1/ParsePABC1/BaseVisitors/BaseChangeVisitor.cs b/_ParsePABC1/ParsePABC1/BaseVisitors/BaseChangeVisitor.cs index dbd479653..7ef700855 100644 --- a/_ParsePABC1/ParsePABC1/BaseVisitors/BaseChangeVisitor.cs +++ b/_ParsePABC1/ParsePABC1/BaseVisitors/BaseChangeVisitor.cs @@ -11,61 +11,57 @@ namespace ParsePABC1 { class BaseChangeVisitor : CollectUpperNodesVisitor { + public override void DefaultVisit(syntax_tree_node n) + { + // Элементы списков - с конца в начало чтобы можно было эти элементы изменять по ходу (удалять/вставлять/заменять один несколькими) + var Сount = n.subnodes_count; + var СountWithoutListElements = n.subnodes_without_list_elements_count; + + for (var i = 0; i < СountWithoutListElements; i++) + ProcessNode(n[i]); + + for (var i = Сount - 1; i >= СountWithoutListElements; i--) // в обратном порядке + ProcessNode(n[i]); + } + public void Replace(syntax_tree_node from, syntax_tree_node to) { var upper = UpperNode(); if (upper == null) throw new Exception("У корневого элемента нельзя получить UpperNode"); - - int ind = -1; - for (var i = 0; i < upper.subnodes_count; i++) - if (from == upper[i]) - { - ind = i; - break; - } - upper[ind] = to; + upper.Replace(from, to); } - public statement_list UpperStatementList() + public T UpperNodeAs(int up = 1) where T : syntax_tree_node { - var stl = UpperNode() as statement_list; + var stl = UpperNode(up) as T; if (stl == null) - throw new Exception("оператор вложен не в statement_list"); + throw new Exception("Элемент вложен не в " + typeof(T)); return stl; } + public bool DeleteInIdentList(ident id) + { + var idl = UpperNodeAs(); + return idl.Remove(id); + } + public bool DeleteInStatementList(statement st) { - var stl = UpperStatementList(); - bool b = stl.subnodes.Remove(st); - return b; - } - public bool DeleteInIdentList(ident id) - { - var idl = UpperNode() as ident_list; - if (idl==null) - throw new Exception("идентификатор не вложен в id_list"); - var b = idl.idents.Remove(id); - return b; + var stl = UpperNodeAs(); + return stl.Remove(st); } public void ReplaceStatement(statement from, statement to) { - var stl = UpperStatementList(); - var ind = stl.subnodes.IndexOf(from); - if (ind == -1) - throw new Exception("оператор from не найден - некорректный вызов ReplaceStatement"); - stl.subnodes[ind] = to; + var stl = UpperNodeAs(); + stl.Replace(from, to); } - public void ReplaceStatement(statement from, List to) + + public void ReplaceStatement(statement from, IEnumerable to) { - var stl = UpperStatementList(); - var ind = stl.subnodes.IndexOf(from); - if (ind == -1) - throw new Exception("оператор from не найден - некорректный вызов ReplaceStatement"); - stl.subnodes.RemoveAt(ind); - stl.subnodes.InsertRange(ind, to); + var stl = UpperNodeAs(); + stl.Replace(from, to); } } diff --git a/_ParsePABC1/ParsePABC1/BaseVisitors/BaseEnterExitVisitor.cs b/_ParsePABC1/ParsePABC1/BaseVisitors/BaseEnterExitVisitor.cs index f98d2e4e2..ad46a7ca8 100644 --- a/_ParsePABC1/ParsePABC1/BaseVisitors/BaseEnterExitVisitor.cs +++ b/_ParsePABC1/ParsePABC1/BaseVisitors/BaseEnterExitVisitor.cs @@ -9,7 +9,7 @@ using PascalABCCompiler.SyntaxTree; namespace ParsePABC1 { - class BaseEnterExitVisitor: WalkingVisitor + class BaseEnterExitVisitor: WalkingVisitorNew { public BaseEnterExitVisitor() { diff --git a/_ParsePABC1/ParsePABC1/BaseVisitors/CollectNamespaces.cs b/_ParsePABC1/ParsePABC1/BaseVisitors/CollectNamespaces.cs index dc6e1510a..0c74dfa07 100644 --- a/_ParsePABC1/ParsePABC1/BaseVisitors/CollectNamespaces.cs +++ b/_ParsePABC1/ParsePABC1/BaseVisitors/CollectNamespaces.cs @@ -49,9 +49,11 @@ namespace ParsePABC1 public override void visit(class_definition cl) { type_declarations tds = UpperNode(2) as type_declarations; - var f = tds.types_decl.Find(td => td.type_def == cl); if (PrintInfo) + { + var f = tds.types_decl.Find(td => td.type_def == cl); Console.WriteLine(" " + f.type_name); + } base.visit(cl); } } diff --git a/_ParsePABC1/ParsePABC1/BaseVisitors/SmallHelperVisitors.cs b/_ParsePABC1/ParsePABC1/BaseVisitors/SmallHelperVisitors.cs index 698c9dbf0..c172c5838 100644 --- a/_ParsePABC1/ParsePABC1/BaseVisitors/SmallHelperVisitors.cs +++ b/_ParsePABC1/ParsePABC1/BaseVisitors/SmallHelperVisitors.cs @@ -9,7 +9,7 @@ using PascalABCCompiler.SyntaxTree; namespace ParsePABC1 { - public class FindLocalDefsVisitor : WalkingVisitor // Запускать только для подпрограмм + public class FindLocalDefsVisitor : WalkingVisitorNew // Запускать только для подпрограмм { public ISet ids = new HashSet(); private bool indef = false; @@ -33,7 +33,7 @@ namespace ParsePABC1 } } - public class FindMainIdentsVisitor : WalkingVisitor // в выражении yield это надо будет. + public class FindMainIdentsVisitor : WalkingVisitorNew // в выражении yield это надо будет. { public HashSet vars = new HashSet(); public override void visit(ident id) diff --git a/_ParsePABC1/ParsePABC1/ChangeWhileVisitor.cs b/_ParsePABC1/ParsePABC1/ChangeWhileVisitor.cs index f7a0922ea..e6734af87 100644 --- a/_ParsePABC1/ParsePABC1/ChangeWhileVisitor.cs +++ b/_ParsePABC1/ParsePABC1/ChangeWhileVisitor.cs @@ -19,36 +19,26 @@ namespace ParsePABC1 lbnum++; return "lb#" + lbnum.ToString(); } - public override void Exit(syntax_tree_node st) + public override void visit(while_node wn) { - if (st.GetType() == typeof(while_node)) - { - var wn = st as while_node; + ProcessNode(wn.statements); + var gt1 = new goto_statement(newLabelName()); + var gt2 = new goto_statement(newLabelName()); + var gt3 = new goto_statement(newLabelName()); - var stl = new statement_list(); + var if0 = new if_node(wn.expr, gt1, null); + var lb3 = new labeled_statement(gt3.label, if0); + var lb1 = new labeled_statement(gt1.label, wn.statements); + var lb2 = new labeled_statement(gt2.label, new empty_statement()); - var gt1 = new goto_statement(newLabelName()); - var gt2 = new goto_statement(newLabelName()); - var gt3 = new goto_statement(newLabelName()); + var stl = new statement_list(lb3, gt2, lb1, gt3, lb2); - var if0 = new if_node(wn.expr, gt1, null); - var lb3 = new labeled_statement(gt3.label, if0); - var lb1 = new labeled_statement(gt1.label, wn.statements); - var lb2 = new labeled_statement(gt2.label, new empty_statement()); + Replace(wn, stl); + // в declarations ближайшего блока добавить описание labels + block bl = listNodes.FindLast(x => x is block) as block; - stl.Add(lb3).Add(gt2).Add(lb1).Add(gt3).Add(lb2); - - //var op = new if_node(wn.expr, wn.statements, null); - Replace(wn, stl); - // в declarations ближайшего блока добавить описание labels - block bl = listNodes.FindLast(x => x is block) as block; - - var il = new ident_list(); - il.Add(gt1.label).Add(gt2.label).Add(gt3.label); - var ld = new label_definitions(il); - bl.defs.Add(ld); - } - base.Exit(st); + var ld = new label_definitions(gt1.label, gt2.label, gt3.label); + bl.defs.Add(ld); } } diff --git a/_ParsePABC1/ParsePABC1/DeleteLocalDefs.cs b/_ParsePABC1/ParsePABC1/DeleteLocalDefs.cs index 3f3ebced8..3145379e1 100644 --- a/_ParsePABC1/ParsePABC1/DeleteLocalDefs.cs +++ b/_ParsePABC1/ParsePABC1/DeleteLocalDefs.cs @@ -54,31 +54,16 @@ namespace ParsePABC1 if (idents.Count == 0) { // Выше - variable_definitions, еще выше - declarations - var uvdsl = UpperNode() as variable_definitions; - uvdsl.var_definitions.Remove(vd); // Проблема - мы удаляем первую var_def_statement и вторая становится первой. А в цикле обхода - индексы что естественно + var uvdsl = UpperNodeAs(); + uvdsl.var_definitions.Remove(vd); if (uvdsl.var_definitions.Count == 0) { - var d = UpperNode(2) as declarations; + var d = UpperNodeAs(2); d.defs.Remove(uvdsl); } - } - + } } } - public override void visit(variable_definitions vd) - { - if (vd.var_definitions != null) - for (int i = vd.var_definitions.Count - 1; i >= 0; --i) // в обратном порядке - тогда удаление текущего элемента работает корректно - ProcessNode(vd.var_definitions[i]); - } - - public override void visit(declarations d) - { - if (d.defs != null) - for (int i = d.defs.Count - 1; i >= 0; --i) // в обратном порядке - тогда удаление текущего элемента работает корректно - ProcessNode(d.defs[i]); - } - public void AfterProcTraverse() { idsToDelete.ExceptWith(deletedIdsToDeleteInLocalScope); // исключаем из множества удаляемых идентификаторов те, которые мы нашли и удалили в секции var_statement. Это надо делать не для каждого описания, а в конце подпрограммы после удаления из всех секций var_statement diff --git a/_ParsePABC1/ParsePABC1/ParsePABC1.csproj b/_ParsePABC1/ParsePABC1/ParsePABC1.csproj index 9c32cdf65..dd7aceee9 100644 --- a/_ParsePABC1/ParsePABC1/ParsePABC1.csproj +++ b/_ParsePABC1/ParsePABC1/ParsePABC1.csproj @@ -11,6 +11,7 @@ ParsePABC1 v4.5 512 + AnyCPU @@ -83,11 +84,11 @@ - + {1ab15f6e-c22e-499a-a7ed-54ba7de5cfa6} CodeCompletion - + {c2cac65a-b2ae-4ccc-b067-e6b8e75df73a} SyntaxTree diff --git a/_ParsePABC1/ParsePABC1/ProcessYieldsCapturedVars.cs b/_ParsePABC1/ParsePABC1/ProcessYieldsCapturedVars.cs index 33a7cdf67..83dcb65ea 100644 --- a/_ParsePABC1/ParsePABC1/ProcessYieldsCapturedVars.cs +++ b/_ParsePABC1/ParsePABC1/ProcessYieldsCapturedVars.cs @@ -19,8 +19,7 @@ namespace ParsePABC1 return "clyield#" + clnum.ToString(); } - - public FindMainIdentsVisitor mids = new FindMainIdentsVisitor(); // захваченные переменные процедуры по всем её yield + public FindMainIdentsVisitor mids; // захваченные переменные процедуры по всем её yield public int countNodesVisited; @@ -44,61 +43,54 @@ namespace ParsePABC1 // сокращение обходимых узлов. Как сделать фильтр по тем узлам, которые необходимо обходить? Например, все операторы (без выражений и описаний), все описания (без операторов) if (st is assign || st is var_def_statement || st is procedure_call || st is procedure_header || st is expression) { - visitNode = false; - } - if (st is procedure_definition) - { - mids.vars.Clear(); // очищать при входе в процедуру + visitNode = false; // фильтр - куда не заходить } } - public override void Exit(syntax_tree_node st) + + type_declaration GenClassForYield(procedure_definition pd, IEnumerable fields) { - if (st is procedure_definition) // т.е. мы разобрали процедуру и уже выходим. Это значит, что пока yield будет обрабатываться только в процедурах. Так это и надо. - { - if (!hasYields) - return; - - var dld = new DeleteLocalDefs(mids.vars); // mids.vars - все захваченные переменные - st.visit(dld); // Удалить в локальных и блочных описаниях этой процедуры все захваченные переменные - // В результате работы в mids.vars что-то осталось. Это не локальные переменные и с ними непонятно что делать - dld.AfterProcTraverse(); - - var cm = new class_members(access_modifer.public_modifer); - foreach (var m in dld.BlockDeletedIds) - cm.Add(m); - cm.Add(st as procedure_definition); - var cc = new type_declaration(newClassName(), SyntaxTreeBuilder.BuildClassDefinition(true, cm), SyntaxTreeBuilder.BuildGenSC); - var cct = new type_declarations(cc, null); - - Replace(st, cct); - - /*Console.WriteLine("Удаленные переменные: " + (st as procedure_definition).proc_header.name.meth_name.name); - foreach (var dd in dld.deletedIdsToDeleteInLocalScope) - Console.Write(dd + " "); - Console.WriteLine(); - Console.WriteLine("Оставшиеся переменные: " + (st as procedure_definition).proc_header.name.meth_name.name); - foreach (var dd in mids.vars) - Console.Write(dd + " "); - Console.WriteLine();*/ - } - base.Exit(st); + // Теперь на месте процедуры генерируем класс + var cm = new class_members(access_modifer.public_modifer); + foreach (var m in fields) + cm.Add(m); + cm.Add(pd); + return new type_declaration(newClassName(), SyntaxTreeBuilder.BuildClassDefinition(cm), SyntaxTreeBuilder.BuildGenSC); } + + public override void visit(procedure_definition pd) + { + hasYields = false; + mids = new FindMainIdentsVisitor(); + + base.visit(pd); + + if (!hasYields) // т.е. мы разобрали процедуру и уже выходим. Это значит, что пока yield будет обрабатываться только в процедурах. Так это и надо. + return; + + var dld = new DeleteLocalDefs(mids.vars); // mids.vars - все захваченные переменные + pd.visit(dld); // Удалить в локальных и блочных описаниях этой процедуры все захваченные переменные + // В результате работы в mids.vars что-то осталось. Это не локальные переменные и с ними непонятно что делать + dld.AfterProcTraverse(); + + // Конструируем определение класса + var cc = GenClassForYield(pd, dld.BlockDeletedIds.Union(dld.LocalDeletedIds)); + var cct = new type_declarations(cc); + + Replace(pd, cct); + + mids = null; // вдруг мы выйдем из процедуры, не зайдем в другую, а там - оператор! Такого конечно не может быть + } + public override void visit(yield_node yn) { hasYields = true; - yn.visit(mids); + if (mids != null) // если мы - внутри процедуры + yn.visit(mids); // mids.vars - надо установить, какие из них - локальные, какие - из этого класса, какие - являются параметрами функции, а какие - глобальные (все остальные) // те, которые являются параметрами, надо скопировать в локальные переменные и переименовать использование везде по ходу данной функции // самое сложное - переменные-поля этого класса - они требуют в создаваемом классе, реализующем итератор, хранить Self текущего класса и добавлять это Self везде по ходу алгоритма // вначале будем считать, что переменные-поля этого класса и переменные-параметры не захватываются yield //base.visit(yn); } - public override void visit(declarations d) // в обратном порядке - { - if (d.defs != null) - for (int i = d.defs.Count - 1; i >= 0; --i) // в обратном порядке - тогда удаление текущего элемента работает корректно - ProcessNode(d.defs[i]); - } - } } diff --git a/_ParsePABC1/ParsePABC1/Program.cs b/_ParsePABC1/ParsePABC1/Program.cs index 6840fab38..003f2ddec 100644 --- a/_ParsePABC1/ParsePABC1/Program.cs +++ b/_ParsePABC1/ParsePABC1/Program.cs @@ -1,4 +1,5 @@ using System; +using static System.Console; using System.Collections.Generic; using System.Linq; using System.Text; @@ -24,44 +25,52 @@ namespace ParsePABC1 if (cu == null) { - Console.WriteLine("Не распарсилось"); + WriteLine("Не распарсилось"); } return cu; } static void Main(string[] args) { - var cu = ParseFile(@"d:\w5\ex1.pas"); - if (cu == null) - return; - - /*cu.visit(new ChangeWhileVisitor()); - cu.visit(new DeleteRedundantBeginEnds());*/ + try + { + var cu = ParseFile(@"d:\w5\yield2.pas"); + if (cu == null) + return; - /*cu.visit(new CollectUpperNamespacesVisitor()); + /*cu.visit(new ChangeWhileVisitor()); + cu.visit(new DeleteRedundantBeginEnds());*/ - var allv = new AllVarsInProcYields(); - cu.visit(allv); - allv.PrintDict();*/ + /*cu.visit(new CollectUpperNamespacesVisitor()); - /*var cnt = new CountNodesVisitor(); - cu.visit(cnt); - cnt.PrintSortedByValue();*/ + var allv = new AllVarsInProcYields(); + cu.visit(allv); + allv.PrintDict();*/ - /*var ld = new HashSet(); - ld.Add("a"); - ld.Add("p1"); - ld.Add("s"); - var dld = new DeleteLocalDefs(ld); - cu.visit(dld);*/ + /*var cnt = new CountNodesVisitor(); + cu.visit(cnt); + cnt.PrintSortedByValue();*/ - /*var p = new ProcessYieldCapturedVarsVisitor(); - cu.visit(p);*/ + /*var ld = new HashSet(); + ld.Add("a"); + ld.Add("p1"); + ld.Add("s"); + var dld = new DeleteLocalDefs(ld); + cu.visit(dld);*/ - var p = new CalcConstExprs(); - cu.visit(p); + var p = new ProcessYieldCapturedVarsVisitor(); + cu.visit(p); + + /*var p = new CalcConstExprs(); + cu.visit(p);*/ + + cu.visit(new SimplePrettyPrinterVisitor()); + } + catch (Exception e) + { + Console.WriteLine(e); + } - cu.visit(new SimplePrettyPrinterVisitor()); } } } diff --git a/_ParsePABC1/ParsePABC1/SimplePrettyPrinterVisitor.cs b/_ParsePABC1/ParsePABC1/SimplePrettyPrinterVisitor.cs index be11bd4ed..82552f9f2 100644 --- a/_ParsePABC1/ParsePABC1/SimplePrettyPrinterVisitor.cs +++ b/_ParsePABC1/ParsePABC1/SimplePrettyPrinterVisitor.cs @@ -14,7 +14,7 @@ using PascalABCCompiler.SyntaxTree; namespace ParsePABC1 { - class SimplePrettyPrinterVisitor: WalkingVisitor + class SimplePrettyPrinterVisitor: WalkingVisitorNew { int off = 0; diff --git a/_ParsePABC1/f.pas b/_ParsePABC1/f.pas index 25f5eab42..8f8c99052 100644 --- a/_ParsePABC1/f.pas +++ b/_ParsePABC1/f.pas @@ -7,8 +7,8 @@ const ccc: integer = 2; type bcd = integer; begin var k: integer; - yield x111.x222+fff; - yield aaa[i]^.d+(bbb.c*nnn^)*fff(4); +// yield x111.x222+fff; +// yield aaa[i]^.d+(bbb.c*nnn^)*fff(4); end; function f(var i,j,k: integer): integer; diff --git a/_ParsePABC1/f1.pas b/_ParsePABC1/f1.pas index 700cbfb48..b265c69d2 100644 --- a/_ParsePABC1/f1.pas +++ b/_ParsePABC1/f1.pas @@ -11,6 +11,7 @@ var l,m,n: integer; kk,jj: real; begin var i,j,k,mmm: integer; + yield x111.x222+fff; yield l*k; yield i*n; end; diff --git a/_ParsePABC1/yield2.pas b/_ParsePABC1/yield2.pas index fb3b26bd1..303043563 100644 --- a/_ParsePABC1/yield2.pas +++ b/_ParsePABC1/yield2.pas @@ -1,13 +1,13 @@ +type A = class + j,k: integer; +end; + function Gen: sequence of integer; +var j,k: real; begin var i := 1; - while i<=10 do - begin - yield i*i; - i += 1; - end; + yield i*j; end; begin - write(1) end. \ No newline at end of file diff --git a/bin/Lib/PABCRtl.dll b/bin/Lib/PABCRtl.dll index e42eded88b0a6c367c9d1be78a16041259c240fa..47e1982939a995beb414a314a10fa65c674cb36b 100644 GIT binary patch delta 90382 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 delta 90317 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 BAIks$ diff --git a/bin/Lib/PABCSystem.pas b/bin/Lib/PABCSystem.pas index 31c9691eb..e57763bfb 100644 --- a/bin/Lib/PABCSystem.pas +++ b/bin/Lib/PABCSystem.pas @@ -3017,7 +3017,7 @@ end;} // Extension methods for IEnumerable //------------------------------------------------------------------------------ /// , delim -function System.Collections.Generic.IEnumerable.Print(delim: string := ' '): sequence of T; +function System.Collections.Generic.IEnumerable.Print(delim: string): sequence of T; begin var g := Self.GetEnumerator(); if g.MoveNext() then @@ -3027,16 +3027,28 @@ begin Result := Self; end; +/// , +function System.Collections.Generic.IEnumerable.Print(): sequence of T; +begin + Result := Self.Print(' '); +end; + /// , delim , -function System.Collections.Generic.IEnumerable.Println(delim: string := ' '): sequence of T; +function System.Collections.Generic.IEnumerable.Println(delim: string): sequence of T; begin Self.Print(delim); Writeln; Result := Self; end; +/// , , +function System.Collections.Generic.IEnumerable.Println(): sequence of T; +begin + Result := Self.Println(' '); +end; + /// , , delim -function System.Collections.Generic.IEnumerable.JoinIntoString(delim: string := ' '): string; +function System.Collections.Generic.IEnumerable.JoinIntoString(delim: string): string; begin var g := Self.GetEnumerator(); var sb := new System.Text.StringBuilder(''); @@ -3047,6 +3059,12 @@ begin Result := sb.ToString; end; +/// , , +function System.Collections.Generic.IEnumerable.JoinIntoString(): string; +begin + Result := Self.JoinIntoString(' '); +end; + /// procedure System.Collections.Generic.IEnumerable.&ForEach(action: Action); begin