diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs b/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs index 773dac0b9..f4cd15ac6 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs @@ -2,7 +2,7 @@ // This CSharp output file generated by Gardens Point LEX // Version: 1.1.3.301 // Machine: SSM -// DateTime: 20.08.2015 13:05:17 +// DateTime: 25.08.2015 22:41:39 // UserName: ????????? // GPLEX input file // GPLEX frame file diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs b/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs index e50045084..226d1f438 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs @@ -2,7 +2,7 @@ // GPPG version 1.3.6 // Machine: SSM -// DateTime: 20.08.2015 13:05:18 +// DateTime: 25.08.2015 22:41:40 // UserName: ????????? // Input file diff --git a/Parsers/PascalABCParserNewSaushkin/PABC.ymc b/Parsers/PascalABCParserNewSaushkin/PABC.ymc index b93382f21..ef4177f08 100644 --- a/Parsers/PascalABCParserNewSaushkin/PABC.ymc +++ b/Parsers/PascalABCParserNewSaushkin/PABC.ymc @@ -78,5 +78,6 @@ script= + diff --git a/SyntaxTree/tree/Tree.cs b/SyntaxTree/tree/Tree.cs index d516e763a..6c6c2f4ec 100644 --- a/SyntaxTree/tree/Tree.cs +++ b/SyntaxTree/tree/Tree.cs @@ -18992,7 +18992,7 @@ namespace PascalABCCompiler.SyntaxTree /// ///Конструктор с параметрами. /// - public template_type_reference(named_type_reference _name,template_param_list _params_list) + public template_type_reference(named_type_reference _name, template_param_list _params_list) { this._name=_name; this._params_list=_params_list; diff --git a/SyntaxTree/tree/TreeHelper.cs b/SyntaxTree/tree/TreeHelper.cs index 546a3498d..12df58177 100644 --- a/SyntaxTree/tree/TreeHelper.cs +++ b/SyntaxTree/tree/TreeHelper.cs @@ -184,6 +184,15 @@ namespace PascalABCCompiler.SyntaxTree public partial class bin_expr { + public static bin_expr Greater(expression left, expression right) + { + return new bin_expr(left, right, Operators.Greater); + } + public static bin_expr Less(expression left, expression right) + { + return new bin_expr(left, right, Operators.Less); + } + public override string ToString() { return string.Format("{0} {2} {1}", left, right, OperatorServices.ToString(operation_type, LanguageId.PascalABCNET)); diff --git a/TreeConverter/LambdaExpressions/Closure/CapturedVariablesTreeBuilder.cs b/TreeConverter/LambdaExpressions/Closure/CapturedVariablesTreeBuilder.cs index d02a6af8d..851751f39 100644 --- a/TreeConverter/LambdaExpressions/Closure/CapturedVariablesTreeBuilder.cs +++ b/TreeConverter/LambdaExpressions/Closure/CapturedVariablesTreeBuilder.cs @@ -381,6 +381,11 @@ namespace TreeConverter.LambdaExpressions.Closure } } + public override void visit(unnamed_type_object uto) // SSM 26/08/15 - Роман подсказал + { + ProcessNode(uto.ne_list); + } + public override void visit(foreach_stmt _foreach_stmt) { var loopIdentName = _foreach_stmt.identifier.name.ToLower(); diff --git a/_ParsePABC1/ParsePABC1/YieldVisitors/DeleteAllLocalDefs.cs b/_ParsePABC1/ParsePABC1/YieldVisitors/DeleteAllLocalDefs.cs index adf7f55b1..be4336a69 100644 --- a/_ParsePABC1/ParsePABC1/YieldVisitors/DeleteAllLocalDefs.cs +++ b/_ParsePABC1/ParsePABC1/YieldVisitors/DeleteAllLocalDefs.cs @@ -37,5 +37,7 @@ namespace SyntaxVisitors d.defs.Remove(vd); // может ли остаться список declarations пустым? } + // еще - не заходить в лямбды + } } diff --git a/_ParsePABC1/ParsePABC1/YieldVisitors/ProcessYieldsCapturedVars.cs b/_ParsePABC1/ParsePABC1/YieldVisitors/ProcessYieldsCapturedVars.cs index ab6505cab..8c9b57860 100644 --- a/_ParsePABC1/ParsePABC1/YieldVisitors/ProcessYieldsCapturedVars.cs +++ b/_ParsePABC1/ParsePABC1/YieldVisitors/ProcessYieldsCapturedVars.cs @@ -150,10 +150,11 @@ namespace SyntaxVisitors if (!hasYields) // т.е. мы разобрали функцию и уже выходим. Это значит, что пока yield будет обрабатываться только в функциях. Так это и надо. return; - var dld = new DeleteLocalDefs(mids.vars); // mids.vars - все захваченные переменные - pd.visit(dld); // Удалить в локальных и блочных описаниях этой процедуры все захваченные переменные + var dld = new DeleteAllLocalDefs(); // mids.vars - все захваченные переменные + pd.visit(dld); // Удалить в локальных и блочных описаниях этой процедуры все переменные и вынести их в отдельный список var_def_statement + + mids.vars.Except(dld.LocalDeletedDefsNames); // параметры остались. Их тоже надо исключать - они и так будут обработаны // В результате работы в mids.vars что-то осталось. Это не локальные переменные и с ними непонятно что делать - dld.AfterProcTraverse(); LoweringVisitor.Accept(pd); @@ -162,7 +163,7 @@ namespace SyntaxVisitors (pd.proc_body as block).program_code = cfa.res; // Конструируем определение класса - var cct = GenClassesForYield(pd, dld.BlockDeletedIds.Union(dld.LocalDeletedIds)); + var cct = GenClassesForYield(pd, dld.LocalDeletedDefs); // все удаленные описания переменных делаем описанием класса UpperNodeAs().InsertBefore(pd, cct); diff --git a/_ParsePABC1/yield2.pas b/_ParsePABC1/yield2.pas index 43a1ee267..c03babbbc 100644 --- a/_ParsePABC1/yield2.pas +++ b/_ParsePABC1/yield2.pas @@ -1,9 +1,9 @@ -function Gen(a,b: integer): sequence of integer; +function Gen(n: integer): sequence of integer; var j,k: real; begin var i := 1; - j := 2; - while i<5 do + j := 5; + while i