Incremental

This commit is contained in:
miks1965 2016-07-31 13:21:39 +03:00
parent 36bf5d84ca
commit e6f4a08cc1
8 changed files with 375 additions and 161 deletions

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3"; public const string Major = "3";
public const string Minor = "1"; public const string Minor = "1";
public const string Build = "0"; public const string Build = "0";
public const string Revision = "1286"; public const string Revision = "1288";
public const string MainVersion = Major + "." + Minor; public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%MINOR%=1 %MINOR%=1
%REVISION%=1286 %REVISION%=1288
%COREVERSION%=0 %COREVERSION%=0
%MAJOR%=3 %MAJOR%=3

View file

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-16"?> <?xml version="1.0" encoding="utf-16"?>
<AspectFile Version="3"> <AspectFile Version="3">
<Node> <Node NL="0" NG="0">
<Items> <Items>
<Node Name="Добавляем t[1] где t - Tuple"> <Node Name="Добавляем t[1] где t - Tuple" NL="0" NG="0">
<Items> <Items>
<Node Name="visit(SyntaxTree.indexer _indexer)"> <Node Name="visit(SyntaxTree.indexer _indexer)" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>public override void visit(SyntaxTree.indexer _indexer)</Text> <Text>public override void visit(SyntaxTree.indexer _indexer)</Text>
<OCtx> <OCtx>
@ -15,7 +15,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="indexer_as_expression_index"> <Node Name="indexer_as_expression_index" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>private void indexer_as_expression_index(expression_node expr, SyntaxTree.expression_list parameters,</Text> <Text>private void indexer_as_expression_index(expression_node expr, SyntaxTree.expression_list parameters,</Text>
<OCtx> <OCtx>
@ -26,7 +26,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name=" visit(SyntaxTree.semantic_expr_node"> <Node Name=" visit(SyntaxTree.semantic_expr_node" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>public override void visit(SyntaxTree.semantic_expr_node sen)</Text> <Text>public override void visit(SyntaxTree.semantic_expr_node sen)</Text>
<OCtx> <OCtx>
@ -37,7 +37,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="Автоопределение типа функции по первому Result"> <Node Name="Автоопределение типа функции по первому Result" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>var fh = (_procedure_definition.proc_header as SyntaxTree.function_header);</Text> <Text>var fh = (_procedure_definition.proc_header as SyntaxTree.function_header);</Text>
<OCtx> <OCtx>
@ -50,9 +50,9 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="Реализуем (a,b) := (1,2)"> <Node Name="Реализуем (a,b) := (1,2)" NL="0" NG="0">
<Items> <Items>
<Node Name="visit(assign_tuple"> <Node Name="visit(assign_tuple" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>public override void visit(SyntaxTree.assign_tuple _modern_proc_type)</Text> <Text>public override void visit(SyntaxTree.assign_tuple _modern_proc_type)</Text>
<OCtx> <OCtx>
@ -63,7 +63,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="StartsWith(&quot;System.Tuple&quot;"> <Node Name="StartsWith(&quot;System.Tuple&quot;" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>if (t.FullName.StartsWith("System.Tuple"))</Text> <Text>if (t.FullName.StartsWith("System.Tuple"))</Text>
<OCtx> <OCtx>
@ -76,9 +76,9 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="Реализуем тип (integer,integer)"> <Node Name="Реализуем тип (integer,integer)" NL="0" NG="0">
<Items> <Items>
<Node Name="void visit(enum_type_definition"> <Node Name="void visit(enum_type_definition" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>public override void visit(SyntaxTree.enum_type_definition _enum_type_definition)</Text> <Text>public override void visit(SyntaxTree.enum_type_definition _enum_type_definition)</Text>
<OCtx> <OCtx>
@ -89,7 +89,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="if (!is_enum) "> <Node Name="if (!is_enum) " NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>if (!is_enum)</Text> <Text>if (!is_enum)</Text>
<OCtx> <OCtx>
@ -100,7 +100,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="visit(SyntaxTree.modern_proc_type"> <Node Name="visit(SyntaxTree.modern_proc_type" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>public override void visit(SyntaxTree.modern_proc_type _modern_proc_type)</Text> <Text>public override void visit(SyntaxTree.modern_proc_type _modern_proc_type)</Text>
<OCtx> <OCtx>
@ -113,9 +113,9 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="Делаем ?System ищется только в .NET"> <Node Name="Делаем ?System ищется только в .NET" NL="0" NG="0">
<Items> <Items>
<Node Name="int tn=HashTable.Find(Name);"> <Node Name="int tn=HashTable.Find(Name);" NL="0" NG="0">
<FileName>\treeconverter\symboltable\dsst\symboltable.cs</FileName> <FileName>\treeconverter\symboltable\dsst\symboltable.cs</FileName>
<Text>int tn=HashTable.Find(Name); //найдем имя в хеше</Text> <Text>int tn=HashTable.Find(Name); //найдем имя в хеше</Text>
<OCtx> <OCtx>
@ -126,7 +126,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="modern_proc_type"> <Node Name="modern_proc_type" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>public override void visit(SyntaxTree.modern_proc_type _modern_proc_type)</Text> <Text>public override void visit(SyntaxTree.modern_proc_type _modern_proc_type)</Text>
<OCtx> <OCtx>
@ -139,9 +139,9 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="foreach"> <Node Name="foreach" NL="0" NG="0">
<Items> <Items>
<Node Name="visit(foreach_stmt"> <Node Name="visit(foreach_stmt" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>public override void visit(SyntaxTree.foreach_stmt _foreach_stmt)</Text> <Text>public override void visit(SyntaxTree.foreach_stmt _foreach_stmt)</Text>
<OCtx> <OCtx>
@ -152,7 +152,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="FindIEnumerableElementType"> <Node Name="FindIEnumerableElementType" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>public bool FindIEnumerableElementType(SyntaxTree.foreach_stmt _foreach_stmt, type_node tn, ref type_node elem_type)</Text> <Text>public bool FindIEnumerableElementType(SyntaxTree.foreach_stmt _foreach_stmt, type_node tn, ref type_node elem_type)</Text>
<OCtx> <OCtx>
@ -163,7 +163,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="if (tn is compiled_type_node || tn is compiled_generic_instance_type_node)"> <Node Name="if (tn is compiled_type_node || tn is compiled_generic_instance_type_node)" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>if (tn is compiled_type_node || tn is compiled_generic_instance_type_node) // Если этот тип зашит в .NET</Text> <Text>if (tn is compiled_type_node || tn is compiled_generic_instance_type_node) // Если этот тип зашит в .NET</Text>
<OCtx> <OCtx>
@ -176,9 +176,9 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="Result := "> <Node Name="Result := " NL="0" NG="0">
<Items> <Items>
<Node Name="GetMostCommonType"> <Node Name="GetMostCommonType" NL="0" NG="0">
<FileName>\treeconverter\lambdaexpressions\lambdaresulttypeinferrer.cs</FileName> <FileName>\treeconverter\lambdaexpressions\lambdaresulttypeinferrer.cs</FileName>
<Text>private type_node GetMostCommonType(int kind = 0)</Text> <Text>private type_node GetMostCommonType(int kind = 0)</Text>
<OCtx> <OCtx>
@ -189,7 +189,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="Простой вывод типа Result в visit(procedure_definition"> <Node Name="Простой вывод типа Result в visit(procedure_definition" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>// SSM 20.07.13 если это - узел с коротким определением функции без типа возвращаемого значения, то вывести этот тип</Text> <Text>// SSM 20.07.13 если это - узел с коротким определением функции без типа возвращаемого значения, то вывести этот тип</Text>
<OCtx> <OCtx>
@ -200,7 +200,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="RealSemTypeOfResExpr"> <Node Name="RealSemTypeOfResExpr" NL="0" NG="0">
<FileName>\SyntaxTree\tree\TreeHelper.cs</FileName> <FileName>\SyntaxTree\tree\TreeHelper.cs</FileName>
<Text>public object RealSemTypeOfResExpr = null; // Result := ex; - семантический тип ex - нужно для лучщего выбора среди перегруженных методов с параметрами-лямбдами</Text> <Text>public object RealSemTypeOfResExpr = null; // Result := ex; - семантический тип ex - нужно для лучщего выбора среди перегруженных методов с параметрами-лямбдами</Text>
<OCtx> <OCtx>
@ -211,7 +211,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="ExpressionVisitor (_assign.to as ident).name == &quot;result&quot;"> <Node Name="ExpressionVisitor (_assign.to as ident).name == &quot;result&quot;" NL="0" NG="0">
<FileName>\codecompletion\expressionvisitor.cs</FileName> <FileName>\codecompletion\expressionvisitor.cs</FileName>
<OCtx> <OCtx>
<i Type="Method">public override void visit ( assign _assign )</i> <i Type="Method">public override void visit ( assign _assign )</i>
@ -221,7 +221,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="ResultNodesSearcher"> <Node Name="ResultNodesSearcher" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\lambdahelper.cs</FileName> <FileName>\treeconverter\treeconversion\lambdahelper.cs</FileName>
<Text>public class ResultNodesSearcher : SyntaxTree.WalkingVisitorNew</Text> <Text>public class ResultNodesSearcher : SyntaxTree.WalkingVisitorNew</Text>
<OCtx> <OCtx>
@ -237,7 +237,7 @@
<i Type="Method">public override void visit ( assign value )</i> <i Type="Method">public override void visit ( assign value )</i>
</ICtx> </ICtx>
</Node> </Node>
<Node Name="LambdaResultTypeInferrer"> <Node Name="LambdaResultTypeInferrer" NL="0" NG="0">
<FileName>\TreeConverter\LambdaExpressions\LambdaResultTypeInferrer.cs</FileName> <FileName>\TreeConverter\LambdaExpressions\LambdaResultTypeInferrer.cs</FileName>
<Text>internal class LambdaResultTypeInferrer : WalkingVisitorNew</Text> <Text>internal class LambdaResultTypeInferrer : WalkingVisitorNew</Text>
<OCtx> <OCtx>
@ -259,7 +259,7 @@
<i Type="Method">public override void visit ( var_def_statement varStmt )</i> <i Type="Method">public override void visit ( var_def_statement varStmt )</i>
</ICtx> </ICtx>
<Items> <Items>
<Node Name=" new LambdaResultTypeInferrer"> <Node Name=" new LambdaResultTypeInferrer" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\lambdahelper.cs</FileName> <FileName>\treeconverter\treeconversion\lambdahelper.cs</FileName>
<Text>retType.real_type = new LambdaResultTypeInferrer(funcHeader, procBody, visitor).InferResultType();</Text> <Text>retType.real_type = new LambdaResultTypeInferrer(funcHeader, procBody, visitor).InferResultType();</Text>
<OCtx> <OCtx>
@ -272,7 +272,7 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="visit_lambda_header"> <Node Name="visit_lambda_header" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>visit_lambda_header(_procedure_definition.proc_header as SyntaxTree.function_header, _procedure_definition.proc_body);</Text> <Text>visit_lambda_header(_procedure_definition.proc_header as SyntaxTree.function_header, _procedure_definition.proc_body);</Text>
<OCtx> <OCtx>
@ -283,7 +283,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="hard_node_test_and_visit(_procedure_definition.proc_body)"> <Node Name="hard_node_test_and_visit(_procedure_definition.proc_body)" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>hard_node_test_and_visit(_procedure_definition.proc_body);</Text> <Text>hard_node_test_and_visit(_procedure_definition.proc_body);</Text>
<OCtx> <OCtx>
@ -294,7 +294,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="hard_node_test_and_visit(_procedure_definition.proc_header)"> <Node Name="hard_node_test_and_visit(_procedure_definition.proc_header)" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>hard_node_test_and_visit(_procedure_definition.proc_header);</Text> <Text>hard_node_test_and_visit(_procedure_definition.proc_header);</Text>
<OCtx> <OCtx>
@ -305,7 +305,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="context.top_function.return_value_type"> <Node Name="context.top_function.return_value_type" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>if (context.top_function.return_value_type == null)</Text> <Text>if (context.top_function.return_value_type == null)</Text>
<OCtx> <OCtx>
@ -316,7 +316,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name=" if (context.top_function.return_value_type == null)"> <Node Name=" if (context.top_function.return_value_type == null)" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>if (context.top_function.return_value_type == null)</Text> <Text>if (context.top_function.return_value_type == null)</Text>
<OCtx> <OCtx>
@ -329,9 +329,9 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="QuestionPoint - незаконченное"> <Node Name="QuestionPoint - незаконченное" NL="0" NG="0">
<Items> <Items>
<Node Name="visit(SyntaxTree.question_colon_expression"> <Node Name="visit(SyntaxTree.question_colon_expression" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>public override void visit(SyntaxTree.question_colon_expression node)</Text> <Text>public override void visit(SyntaxTree.question_colon_expression node)</Text>
<OCtx> <OCtx>
@ -342,7 +342,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="dot_node_as_expression_dot_ident"> <Node Name="dot_node_as_expression_dot_ident" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>private void dot_node_as_expression_dot_ident(expression_node en, SyntaxTree.ident id_right, motivation mot, addressed_value syntax_node)</Text> <Text>private void dot_node_as_expression_dot_ident(expression_node en, SyntaxTree.ident id_right, motivation mot, addressed_value syntax_node)</Text>
<OCtx> <OCtx>
@ -353,7 +353,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="visit(SyntaxTree.indexer"> <Node Name="visit(SyntaxTree.indexer" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>public override void visit(SyntaxTree.indexer _indexer)</Text> <Text>public override void visit(SyntaxTree.indexer _indexer)</Text>
<OCtx> <OCtx>
@ -364,7 +364,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="NewVariable"> <Node Name="NewVariable" NL="0" NG="0">
<FileName>\parsers\pascalabcparsernewsaushkin\semanticrules.cs</FileName> <FileName>\parsers\pascalabcparsernewsaushkin\semanticrules.cs</FileName>
<Text>public expression NewVariable(addressed_value variable, expression var_specifiers, LexLocation loc)</Text> <Text>public expression NewVariable(addressed_value variable, expression var_specifiers, LexLocation loc)</Text>
<OCtx> <OCtx>
@ -377,9 +377,9 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="Выбор перегруженного метода"> <Node Name="Выбор перегруженного метода" NL="0" NG="0">
<Items> <Items>
<Node Name="select_function"> <Node Name="select_function" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\convertion_data_and_alghoritms.cs</FileName> <FileName>\treeconverter\treeconversion\convertion_data_and_alghoritms.cs</FileName>
<Text>public function_node select_function(expressions_list parameters, SymbolInfo functions, location loc, List&lt;SyntaxTree.expression&gt; syntax_nodes_parameters = null)</Text> <Text>public function_node select_function(expressions_list parameters, SymbolInfo functions, location loc, List&lt;SyntaxTree.expression&gt; syntax_nodes_parameters = null)</Text>
<OCtx> <OCtx>
@ -390,7 +390,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="visit_method_call"> <Node Name="visit_method_call" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>internal void visit_method_call(SyntaxTree.method_call _method_call)</Text> <Text>internal void visit_method_call(SyntaxTree.method_call _method_call)</Text>
<OCtx> <OCtx>
@ -401,7 +401,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="generic_convertions.DeduceFunction(func, parameters"> <Node Name="generic_convertions.DeduceFunction(func, parameters" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\convertion_data_and_alghoritms.cs</FileName> <FileName>\treeconverter\treeconversion\convertion_data_and_alghoritms.cs</FileName>
<Text>function_node inst = generic_convertions.DeduceFunction(func, parameters,</Text> <Text>function_node inst = generic_convertions.DeduceFunction(func, parameters,</Text>
<OCtx> <OCtx>
@ -414,9 +414,9 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="Короткое определение функции"> <Node Name="Короткое определение функции" NL="0" NG="0">
<Items> <Items>
<Node Name="visit(SyntaxTree.procedure_definition"> <Node Name="visit(SyntaxTree.procedure_definition" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>public override void visit(SyntaxTree.procedure_definition _procedure_definition)</Text> <Text>public override void visit(SyntaxTree.procedure_definition _procedure_definition)</Text>
<OCtx> <OCtx>
@ -427,7 +427,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name=" if (ttt is undefined_type)"> <Node Name=" if (ttt is undefined_type)" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>if (ttt is undefined_type)</Text> <Text>if (ttt is undefined_type)</Text>
<OCtx> <OCtx>
@ -438,7 +438,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="calc return_value_type"> <Node Name="calc return_value_type" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>// SSM 12/04/16 - short func definitions - calc return_value_type</Text> <Text>// SSM 12/04/16 - short func definitions - calc return_value_type</Text>
<OCtx> <OCtx>
@ -451,9 +451,9 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="x-&gt;Print(x)"> <Node Name="x-&gt;Print(x)" NL="0" NG="0">
<Items> <Items>
<Node Name="visit(function_lambda_definition"> <Node Name="visit(function_lambda_definition" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<OCtx> <OCtx>
<i Type="Method">public override void visit ( SyntaxTree . function_lambda_definition _function_lambda_definition )</i> <i Type="Method">public override void visit ( SyntaxTree . function_lambda_definition _function_lambda_definition )</i>
@ -463,7 +463,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="InferTypesFromVarStmt"> <Node Name="InferTypesFromVarStmt" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\LambdaHelper.cs</FileName> <FileName>\TreeConverter\TreeConversion\LambdaHelper.cs</FileName>
<Text>public static void InferTypesFromVarStmt(type_node leftType, function_lambda_definition lambdaDef, syntax_tree_visitor visitor)</Text> <Text>public static void InferTypesFromVarStmt(type_node leftType, function_lambda_definition lambdaDef, syntax_tree_visitor visitor)</Text>
<OCtx> <OCtx>
@ -474,7 +474,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="visit(SyntaxTree.assign"> <Node Name="visit(SyntaxTree.assign" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>public override void visit(SyntaxTree.assign _assign)</Text> <Text>public override void visit(SyntaxTree.assign _assign)</Text>
<OCtx> <OCtx>
@ -485,7 +485,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="visit(SyntaxTree.var_def_statement"> <Node Name="visit(SyntaxTree.var_def_statement" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>public override void visit(SyntaxTree.var_def_statement _var_def_statement)</Text> <Text>public override void visit(SyntaxTree.var_def_statement _var_def_statement)</Text>
<OCtx> <OCtx>
@ -496,7 +496,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="MaybeConvertFunctionLambdaDefinitionToProcedureLambdaDefinition"> <Node Name="MaybeConvertFunctionLambdaDefinitionToProcedureLambdaDefinition" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>MaybeConvertFunctionLambdaDefinitionToProcedureLambdaDefinition(fld1);</Text> <Text>MaybeConvertFunctionLambdaDefinitionToProcedureLambdaDefinition(fld1);</Text>
<OCtx> <OCtx>
@ -507,7 +507,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="vardef LambdaHelper.InferTypesFromVarStmt"> <Node Name="vardef LambdaHelper.InferTypesFromVarStmt" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>LambdaHelper.InferTypesFromVarStmt(tn, _var_def_statement.inital_value as SyntaxTree.function_lambda_definition, this); //lroman//</Text> <Text>LambdaHelper.InferTypesFromVarStmt(tn, _var_def_statement.inital_value as SyntaxTree.function_lambda_definition, this); //lroman//</Text>
<OCtx> <OCtx>
@ -518,7 +518,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="UNABLE_TO_CONVERT_FUNCTIONAL_TYPE_TO_PROCEDURAL_TYPE"> <Node Name="UNABLE_TO_CONVERT_FUNCTIONAL_TYPE_TO_PROCEDURAL_TYPE" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\LambdaHelper.cs</FileName> <FileName>\TreeConverter\TreeConversion\LambdaHelper.cs</FileName>
<Text>//throw new SimpleSemanticError(visitor.get_location(lambdaDef), "UNABLE_TO_CONVERT_FUNCTIONAL_TYPE_TO_PROCEDURAL_TYPE");</Text> <Text>//throw new SimpleSemanticError(visitor.get_location(lambdaDef), "UNABLE_TO_CONVERT_FUNCTIONAL_TYPE_TO_PROCEDURAL_TYPE");</Text>
<OCtx> <OCtx>
@ -529,7 +529,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="AddError(loc, &quot;FUNCTION_EXPECTED_PROCEDURE_{0}_MEET&quot;"> <Node Name="AddError(loc, &quot;FUNCTION_EXPECTED_PROCEDURE_{0}_MEET&quot;" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>AddError(loc, "FUNCTION_EXPECTED_PROCEDURE_{0}_MEET", fn);</Text> <Text>AddError(loc, "FUNCTION_EXPECTED_PROCEDURE_{0}_MEET", fn);</Text>
<OCtx> <OCtx>
@ -540,9 +540,9 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="В параметрах"> <Node Name="В параметрах" NL="0" NG="0">
<Items> <Items>
<Node Name="create_not_static_method_call"> <Node Name="create_not_static_method_call" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>private base_function_call create_not_static_method_call(function_node fn, expression_node en, location loc, bool procedure_allowed)</Text> <Text>private base_function_call create_not_static_method_call(function_node fn, expression_node en, location loc, bool procedure_allowed)</Text>
<OCtx> <OCtx>
@ -557,9 +557,9 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="Преобразование синт дерева"> <Node Name="Преобразование синт дерева" NL="0" NG="0">
<Items> <Items>
<Node Name="Вызов Convert контроллера SyntaxTrees"> <Node Name="Вызов Convert контроллера SyntaxTrees" NL="0" NG="0">
<FileName>\Compiler\Compiler.cs</FileName> <FileName>\Compiler\Compiler.cs</FileName>
<Text>CurrentUnit.SyntaxTree = syntaxTreeConvertersController.Convert(CurrentUnit.SyntaxTree) as SyntaxTree.compilation_unit;</Text> <Text>CurrentUnit.SyntaxTree = syntaxTreeConvertersController.Convert(CurrentUnit.SyntaxTree) as SyntaxTree.compilation_unit;</Text>
<OCtx> <OCtx>
@ -570,7 +570,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="class SemanticTreeConvertersController"> <Node Name="class SemanticTreeConvertersController" NL="0" NG="0">
<FileName>\Compiler\SemanticTreeConverters\SemanticTreeConvertersController.cs</FileName> <FileName>\Compiler\SemanticTreeConverters\SemanticTreeConvertersController.cs</FileName>
<Text>public class SemanticTreeConvertersController</Text> <Text>public class SemanticTreeConvertersController</Text>
<OCtx> <OCtx>
@ -592,7 +592,7 @@
<i Type="Method">public SemanticTree . IProgramNode Convert ( SemanticTree . IProgramNode ProgramNode )</i> <i Type="Method">public SemanticTree . IProgramNode Convert ( SemanticTree . IProgramNode ProgramNode )</i>
</ICtx> </ICtx>
</Node> </Node>
<Node Name="SyntaxTreeConvertersController в Compiler"> <Node Name="SyntaxTreeConvertersController в Compiler" NL="0" NG="0">
<FileName>\Compiler\Compiler.cs</FileName> <FileName>\Compiler\Compiler.cs</FileName>
<Text>public SyntaxTreeConvertersController SyntaxTreeConvertersController</Text> <Text>public SyntaxTreeConvertersController SyntaxTreeConvertersController</Text>
<OCtx> <OCtx>
@ -603,7 +603,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="foreach (ISyntaxTreeConverter SyntaxTreeConverter in syntaxTreeConverters)"> <Node Name="foreach (ISyntaxTreeConverter SyntaxTreeConverter in syntaxTreeConverters)" NL="0" NG="0">
<FileName>\Compiler\SyntaxTreeConvertersController\SyntaxTreeConvertersController.cs</FileName> <FileName>\Compiler\SyntaxTreeConvertersController\SyntaxTreeConvertersController.cs</FileName>
<Text>foreach (ISyntaxTreeConverter SyntaxTreeConverter in syntaxTreeConverters)</Text> <Text>foreach (ISyntaxTreeConverter SyntaxTreeConverter in syntaxTreeConverters)</Text>
<OCtx> <OCtx>
@ -616,9 +616,9 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="PVS Studio Detected"> <Node Name="PVS Studio Detected" NL="0" NG="0">
<Items> <Items>
<Node Name="Нужно использовать &amp;&amp; вместо ||"> <Node Name="Нужно использовать &amp;&amp; вместо ||" NL="0" NG="0">
<FileName>\codecompletion\domconverter.cs</FileName> <FileName>\codecompletion\domconverter.cs</FileName>
<Text>if (pattern != null || pattern != "")</Text> <Text>if (pattern != null || pattern != "")</Text>
<OCtx> <OCtx>
@ -629,7 +629,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="Неиспользуемый результат Replace"> <Node Name="Неиспользуемый результат Replace" NL="0" NG="0">
<FileName>\visualplugins\languageconverter\source\textformatter.cs</FileName> <FileName>\visualplugins\languageconverter\source\textformatter.cs</FileName>
<Text>_word.Replace(specSymbol, "");</Text> <Text>_word.Replace(specSymbol, "");</Text>
<OCtx> <OCtx>
@ -640,7 +640,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="Неиспользуемый результат OrderBy"> <Node Name="Неиспользуемый результат OrderBy" NL="0" NG="0">
<FileName>\visualpascalabcnet\formsdesignerbinding\dependecies\src\main\base\project\src\services\refactoringservice\refactoringservice.cs</FileName> <FileName>\visualpascalabcnet\formsdesignerbinding\dependecies\src\main\base\project\src\services\refactoringservice\refactoringservice.cs</FileName>
<Text>result.OrderBy(node =&gt; node.Content.FullyQualifiedName);</Text> <Text>result.OrderBy(node =&gt; node.Content.FullyQualifiedName);</Text>
<OCtx> <OCtx>
@ -651,9 +651,9 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="Одинаковые подвыражения в условии"> <Node Name="Одинаковые подвыражения в условии" NL="0" NG="0">
<Items> <Items>
<Node Name="1"> <Node Name="1" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>if (_pascal_set_constant.values != null &amp;&amp; _pascal_set_constant.values != null)</Text> <Text>if (_pascal_set_constant.values != null &amp;&amp; _pascal_set_constant.values != null)</Text>
<OCtx> <OCtx>
@ -664,7 +664,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="2"> <Node Name="2" NL="0" NG="0">
<FileName>\visualpascalabcnet\workbench\runnermanagerhandlers.cs</FileName> <FileName>\visualpascalabcnet\workbench\runnermanagerhandlers.cs</FileName>
<Text>if (File.Exists(pdbFileName) &amp;&amp; File.Exists(pdbFileName))</Text> <Text>if (File.Exists(pdbFileName) &amp;&amp; File.Exists(pdbFileName))</Text>
<OCtx> <OCtx>
@ -675,7 +675,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="Самая интересная ошибка"> <Node Name="Самая интересная ошибка" NL="0" NG="0">
<FileName>\visualpascalabcnet\formsdesignerbinding\dependecies\src\main\base\project\src\editor\codecompletion\nrefactoryinsightwindowhandler.cs</FileName> <FileName>\visualpascalabcnet\formsdesignerbinding\dependecies\src\main\base\project\src\editor\codecompletion\nrefactoryinsightwindowhandler.cs</FileName>
<Note>Вот здесь то место, где не учитывается один вариант открывающих скобок <Note>Вот здесь то место, где не учитывается один вариант открывающих скобок
Вместо одного из openBracketToken нужно написать openBracesToken</Note> Вместо одного из openBracketToken нужно написать openBracesToken</Note>
@ -690,9 +690,9 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="Всегда истинные выражения"> <Node Name="Всегда истинные выражения" NL="0" NG="0">
<Items> <Items>
<Node Name="1"> <Node Name="1" NL="0" NG="0">
<FileName>\treeconverter\systemlib\static_executors.cs</FileName> <FileName>\treeconverter\systemlib\static_executors.cs</FileName>
<Text>if (value &gt;= int.MinValue &amp;&amp; value &lt;= int.MaxValue)</Text> <Text>if (value &gt;= int.MinValue &amp;&amp; value &lt;= int.MaxValue)</Text>
<OCtx> <OCtx>
@ -703,7 +703,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="2"> <Node Name="2" NL="0" NG="0">
<FileName>\treeconverter\systemlib\static_executors.cs</FileName> <FileName>\treeconverter\systemlib\static_executors.cs</FileName>
<Text>if (value &gt;= long.MinValue &amp;&amp; value &lt;= long.MaxValue)</Text> <Text>if (value &gt;= long.MinValue &amp;&amp; value &lt;= long.MaxValue)</Text>
<OCtx> <OCtx>
@ -714,7 +714,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="3"> <Node Name="3" NL="0" NG="0">
<FileName>\NETGenerator\NETGenerator.cs</FileName> <FileName>\NETGenerator\NETGenerator.cs</FileName>
<Text>if (pos &lt;= 255) il.Emit(OpCodes.Starg_S, pos);</Text> <Text>if (pos &lt;= 255) il.Emit(OpCodes.Starg_S, pos);</Text>
<OCtx> <OCtx>
@ -725,7 +725,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="4"> <Node Name="4" NL="0" NG="0">
<FileName>\NETGenerator\NETGenerator.cs</FileName> <FileName>\NETGenerator\NETGenerator.cs</FileName>
<Text>if (pos &lt;= 255) il.Emit(OpCodes.Starg_S, pos);</Text> <Text>if (pos &lt;= 255) il.Emit(OpCodes.Starg_S, pos);</Text>
<OCtx> <OCtx>
@ -736,7 +736,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="5"> <Node Name="5" NL="0" NG="0">
<FileName>\NETGenerator\NETGenerator.cs</FileName> <FileName>\NETGenerator\NETGenerator.cs</FileName>
<Text>if (pos &lt;= 255) il.Emit(OpCodes.Ldarga_S, pos);</Text> <Text>if (pos &lt;= 255) il.Emit(OpCodes.Ldarga_S, pos);</Text>
<OCtx> <OCtx>
@ -749,7 +749,7 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="Повторная проверка условия"> <Node Name="Повторная проверка условия" NL="0" NG="0">
<FileName>\codecompletion\findreferences.cs</FileName> <FileName>\codecompletion\findreferences.cs</FileName>
<Note>Двумя строчками ниже <Note>Двумя строчками ниже
(Здесь сказывается недостаток моего инструмента - если в методе есть две одинаковые строчки - переход осуществляется только на первую, а надо на вторую)</Note> (Здесь сказывается недостаток моего инструмента - если в методе есть две одинаковые строчки - переход осуществляется только на первую, а надо на вторую)</Note>
@ -762,7 +762,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="Дважды проверяется if (left is int64_const)"> <Node Name="Дважды проверяется if (left is int64_const)" NL="0" NG="0">
<FileName>\parsertools\syntaxtreevisitors\syntaxtreecomparer.cs</FileName> <FileName>\parsertools\syntaxtreevisitors\syntaxtreecomparer.cs</FileName>
<Note>597 и 631 строки в текущей версии</Note> <Note>597 и 631 строки в текущей версии</Note>
<Text>else if (left is int64_const)</Text> <Text>else if (left is int64_const)</Text>
@ -774,7 +774,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="Трижды проверяется if (left is case_node)"> <Node Name="Трижды проверяется if (left is case_node)" NL="0" NG="0">
<FileName>\parsertools\syntaxtreevisitors\syntaxtreecomparer.cs</FileName> <FileName>\parsertools\syntaxtreevisitors\syntaxtreecomparer.cs</FileName>
<Note>1599 <Note>1599
1611 1611
@ -790,9 +790,9 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="Ошибка read(x,s)"> <Node Name="Ошибка read(x,s)" NL="0" NG="0">
<Items> <Items>
<Node Name="make_read_call вызов"> <Node Name="make_read_call вызов" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>expression_node bfcint = make_read_call(si, _method_call.parameters, subloc2);</Text> <Text>expression_node bfcint = make_read_call(si, _method_call.parameters, subloc2);</Text>
<OCtx> <OCtx>
@ -803,7 +803,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="make_read_call - описание"> <Node Name="make_read_call - описание" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<OCtx> <OCtx>
<i Type="Method">private expression_node make_read_call ( SymbolInfo si , SyntaxTree . expression_list parameters , location loc )</i> <i Type="Method">private expression_node make_read_call ( SymbolInfo si , SyntaxTree . expression_list parameters , location loc )</i>
@ -813,7 +813,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="readln_string_file = true;"> <Node Name="readln_string_file = true;" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Note>Это - непонятное место из-за которого происходит ошибка</Note> <Note>Это - непонятное место из-за которого происходит ошибка</Note>
<Text>readln_string_file = true;</Text> <Text>readln_string_file = true;</Text>
@ -825,7 +825,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="!readln_string_file"> <Node Name="!readln_string_file" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>if (!readln_string_file)</Text> <Text>if (!readln_string_file)</Text>
<OCtx> <OCtx>
@ -838,7 +838,7 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="visit_program_code(_block.program_code)"> <Node Name="visit_program_code(_block.program_code)" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>visit_program_code(_block.program_code);</Text> <Text>visit_program_code(_block.program_code);</Text>
<OCtx> <OCtx>
@ -849,7 +849,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="lab.is_defined"> <Node Name="lab.is_defined" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>if (lab.is_defined)</Text> <Text>if (lab.is_defined)</Text>
<OCtx> <OCtx>
@ -860,9 +860,9 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="Yield"> <Node Name="Yield" NL="0" NG="0">
<Items> <Items>
<Node Name="Осн. визитор visit(procedure_definition pd)"> <Node Name="Осн. визитор visit(procedure_definition pd)" NL="0" NG="0">
<FileName>\SyntaxVisitors\YieldVisitors\ProcessYieldsCapturedVars.cs</FileName> <FileName>\SyntaxVisitors\YieldVisitors\ProcessYieldsCapturedVars.cs</FileName>
<Text>public override void visit(procedure_definition pd)</Text> <Text>public override void visit(procedure_definition pd)</Text>
<OCtx> <OCtx>
@ -873,7 +873,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="root.visit(new ProcessYieldCapturedVarsVisitor());"> <Node Name="root.visit(new ProcessYieldCapturedVarsVisitor());" NL="0" NG="0">
<FileName>\Yield\YieldConversionSyntax\YieldDesugarSyntaxTreeConverter.cs</FileName> <FileName>\Yield\YieldConversionSyntax\YieldDesugarSyntaxTreeConverter.cs</FileName>
<Text>root.visit(new ProcessYieldCapturedVarsVisitor());</Text> <Text>root.visit(new ProcessYieldCapturedVarsVisitor());</Text>
<OCtx> <OCtx>
@ -884,9 +884,9 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="NewConstructFiniteAutomata"> <Node Name="NewConstructFiniteAutomata" NL="0" NG="0">
<Items> <Items>
<Node Name="ConstructFiniteAutomata1"> <Node Name="ConstructFiniteAutomata1" NL="0" NG="0">
<FileName>\syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs</FileName> <FileName>\syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs</FileName>
<Text>public ConstructFiniteAutomata1(block bl)</Text> <Text>public ConstructFiniteAutomata1(block bl)</Text>
<OCtx> <OCtx>
@ -897,8 +897,8 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="GenClassesForYield"> <Node Name="GenClassesForYield" NL="0" NG="0">
<FileName>\yield\syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs</FileName> <FileName>\syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs</FileName>
<Text>type_declarations GenClassesForYield(procedure_definition pd,</Text> <Text>type_declarations GenClassesForYield(procedure_definition pd,</Text>
<OCtx> <OCtx>
<i Type="Method">type_declarations GenClassesForYield ( procedure_definition pd , IEnumerable &lt; var_def_statement &gt; fields , IDictionary &lt; string , string &gt; localsMap , IDictionary &lt; string , string &gt; formalParamsMap )</i> <i Type="Method">type_declarations GenClassesForYield ( procedure_definition pd , IEnumerable &lt; var_def_statement &gt; fields , IDictionary &lt; string , string &gt; localsMap , IDictionary &lt; string , string &gt; formalParamsMap )</i>
@ -910,7 +910,7 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="YieldHelpers"> <Node Name="YieldHelpers" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>string Consts__Self = YieldHelpers.YieldConsts.Self;</Text> <Text>string Consts__Self = YieldHelpers.YieldConsts.Self;</Text>
<OCtx> <OCtx>
@ -921,7 +921,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="ObjectCopier.Clone"> <Node Name="ObjectCopier.Clone" NL="0" NG="0">
<FileName>\syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs</FileName> <FileName>\syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs</FileName>
<Text>function_header nfh = ObjectCopier.Clone(fh);</Text> <Text>function_header nfh = ObjectCopier.Clone(fh);</Text>
<OCtx> <OCtx>
@ -932,7 +932,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="private Dictionary&lt;Guid, semantic_type_node&gt;"> <Node Name="private Dictionary&lt;Guid, semantic_type_node&gt;" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>private Dictionary&lt;Guid, semantic_type_node&gt; _yieldForeachTypeMap = new Dictionary&lt;Guid, semantic_type_node&gt;();</Text> <Text>private Dictionary&lt;Guid, semantic_type_node&gt; _yieldForeachTypeMap = new Dictionary&lt;Guid, semantic_type_node&gt;();</Text>
<OCtx> <OCtx>
@ -943,7 +943,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="InsertHelperMethod"> <Node Name="InsertHelperMethod" NL="0" NG="0">
<FileName>\syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs</FileName> <FileName>\syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs</FileName>
<Text>//InsertHelperMethod(pd, pdCloned); // SSM 13.07.16 - вызов этого метода можно не добавлять</Text> <Text>//InsertHelperMethod(pd, pdCloned); // SSM 13.07.16 - вызов этого метода можно не добавлять</Text>
<OCtx> <OCtx>
@ -954,9 +954,9 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="UnknownExprType"> <Node Name="UnknownExprType" NL="0" NG="0">
<Items> <Items>
<Node Name=" visit(yield_unknown_expression_type"> <Node Name=" visit(yield_unknown_expression_type" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>public override void visit(SyntaxTree.yield_unknown_expression_type _unk_expr)</Text> <Text>public override void visit(SyntaxTree.yield_unknown_expression_type _unk_expr)</Text>
<OCtx> <OCtx>
@ -967,7 +967,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="visit(SyntaxTree.assign"> <Node Name="visit(SyntaxTree.assign" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>public override void visit(SyntaxTree.assign _assign)</Text> <Text>public override void visit(SyntaxTree.assign _assign)</Text>
<OCtx> <OCtx>
@ -978,7 +978,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name=" TypeInfo ti = helper.GetTypeReference(value.type);"> <Node Name=" TypeInfo ti = helper.GetTypeReference(value.type);" NL="0" NG="0">
<FileName>\netgenerator\netgenerator.cs</FileName> <FileName>\netgenerator\netgenerator.cs</FileName>
<Text>TypeInfo ti = helper.GetTypeReference(value.type);</Text> <Text>TypeInfo ti = helper.GetTypeReference(value.type);</Text>
<OCtx> <OCtx>
@ -991,9 +991,9 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="UnknownForeachType"> <Node Name="UnknownForeachType" NL="0" NG="0">
<Items> <Items>
<Node Name="visit(yield_unknown_foreach_type"> <Node Name="visit(yield_unknown_foreach_type" NL="0" NG="0">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName> <FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>public override void visit(SyntaxTree.yield_unknown_foreach_type _unk)</Text> <Text>public override void visit(SyntaxTree.yield_unknown_foreach_type _unk)</Text>
<OCtx> <OCtx>
@ -1004,7 +1004,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="stl.Add(new assign(currentIdent"> <Node Name="stl.Add(new assign(currentIdent" NL="0" NG="0">
<FileName>\syntaxvisitors\yieldvisitors\loweringvisitor.cs</FileName> <FileName>\syntaxvisitors\yieldvisitors\loweringvisitor.cs</FileName>
<Text>stl.Add(new assign(currentIdent, new dot_node(enumeratorIdent, "Current")));</Text> <Text>stl.Add(new assign(currentIdent, new dot_node(enumeratorIdent, "Current")));</Text>
<OCtx> <OCtx>
@ -1015,7 +1015,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="visit(SyntaxTree.assign"> <Node Name="visit(SyntaxTree.assign" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>public override void visit(SyntaxTree.assign _assign)</Text> <Text>public override void visit(SyntaxTree.assign _assign)</Text>
<OCtx> <OCtx>
@ -1026,7 +1026,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="if (to.type is compiled_type_node)"> <Node Name="if (to.type is compiled_type_node)" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>else if (to.type is compiled_type_node)</Text> <Text>else if (to.type is compiled_type_node)</Text>
<OCtx> <OCtx>
@ -1037,7 +1037,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="FindIEnumerableElementType"> <Node Name="FindIEnumerableElementType" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<OCtx> <OCtx>
<i Type="Method">public bool FindIEnumerableElementType ( type_node tn , ref type_node elem_type )</i> <i Type="Method">public bool FindIEnumerableElementType ( type_node tn , ref type_node elem_type )</i>
@ -1047,7 +1047,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="generic_convertions.all_type_instances.Add(instance);"> <Node Name="generic_convertions.all_type_instances.Add(instance);" NL="0" NG="0">
<FileName>\TreeConverter\TreeRealization\generics.cs</FileName> <FileName>\TreeConverter\TreeRealization\generics.cs</FileName>
<Text>generic_convertions.all_type_instances.Add(instance);</Text> <Text>generic_convertions.all_type_instances.Add(instance);</Text>
<OCtx> <OCtx>
@ -1058,7 +1058,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="if (shouldAddToAllTypeInstances)"> <Node Name="if (shouldAddToAllTypeInstances)" NL="0" NG="0">
<FileName>\TreeConverter\TreeRealization\generics.cs</FileName> <FileName>\TreeConverter\TreeRealization\generics.cs</FileName>
<Text>if (shouldAddToAllTypeInstances) //lroman// Если зашли сюда при выведении типов параметров лямбды, то тип инстанцироваться может с типом lambda_any_type_node. Поэтому, если выводим типы. То данную инстанцию не добавляем</Text> <Text>if (shouldAddToAllTypeInstances) //lroman// Если зашли сюда при выведении типов параметров лямбды, то тип инстанцироваться может с типом lambda_any_type_node. Поэтому, если выводим типы. То данную инстанцию не добавляем</Text>
<OCtx> <OCtx>
@ -1069,7 +1069,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="ConstructFiniteAutomata"> <Node Name="ConstructFiniteAutomata" NL="0" NG="0">
<FileName>\syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs</FileName> <FileName>\syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs</FileName>
<OCtx> <OCtx>
<i Type="ClassOrNamespace">class ConstructFiniteAutomata</i> <i Type="ClassOrNamespace">class ConstructFiniteAutomata</i>
@ -1092,7 +1092,7 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="ReplaceCapturedVariables"> <Node Name="ReplaceCapturedVariables" NL="0" NG="0">
<FileName>\syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs</FileName> <FileName>\syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs</FileName>
<Text>ReplaceCapturedVariables(pd, dld.LocalDeletedDefs, out CapturedLocalsNamesMap, out CapturedFormalParamsNamesMap);</Text> <Text>ReplaceCapturedVariables(pd, dld.LocalDeletedDefs, out CapturedLocalsNamesMap, out CapturedFormalParamsNamesMap);</Text>
<OCtx> <OCtx>
@ -1103,7 +1103,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="var pdCloned = ObjectCopier.Clone(pd);"> <Node Name="var pdCloned = ObjectCopier.Clone(pd);" NL="0" NG="0">
<FileName>\syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs</FileName> <FileName>\syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs</FileName>
<Text>var pdCloned = ObjectCopier.Clone(pd);</Text> <Text>var pdCloned = ObjectCopier.Clone(pd);</Text>
<OCtx> <OCtx>
@ -1114,7 +1114,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="if (pd.has_yield) // SSM bug fix #219"> <Node Name="if (pd.has_yield) // SSM bug fix #219" NL="0" NG="0">
<FileName>\syntaxvisitors\YieldVisitors\MarkMethodHasYieldVisitor.cs</FileName> <FileName>\syntaxvisitors\YieldVisitors\MarkMethodHasYieldVisitor.cs</FileName>
<Text>if (pd.has_yield) // SSM bug fix #219</Text> <Text>if (pd.has_yield) // SSM bug fix #219</Text>
<OCtx> <OCtx>
@ -1127,9 +1127,9 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="Sum(e-&gt;e) ошибка"> <Node Name="Sum(e-&gt;e) ошибка" NL="0" NG="0">
<Items> <Items>
<Node Name="new SeveralFunctionsCanBeCalled"> <Node Name="new SeveralFunctionsCanBeCalled" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\convertion_data_and_alghoritms.cs</FileName> <FileName>\TreeConverter\TreeConversion\convertion_data_and_alghoritms.cs</FileName>
<Text>return AddError&lt;function_node&gt;(new SeveralFunctionsCanBeCalled(loc,set_of_possible_functions));</Text> <Text>return AddError&lt;function_node&gt;(new SeveralFunctionsCanBeCalled(loc,set_of_possible_functions));</Text>
<OCtx> <OCtx>
@ -1140,7 +1140,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="if (funcs.Count == 2)"> <Node Name="if (funcs.Count == 2)" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\convertion_data_and_alghoritms.cs</FileName> <FileName>\TreeConverter\TreeConversion\convertion_data_and_alghoritms.cs</FileName>
<Text>if (funcs.Count == 2)</Text> <Text>if (funcs.Count == 2)</Text>
<OCtx> <OCtx>
@ -1153,9 +1153,9 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="a.Sort((row1, row2) -&gt; 1)"> <Node Name="a.Sort((row1, row2) -&gt; 1)" NL="0" NG="0">
<Items> <Items>
<Node Name="visit_method_call"> <Node Name="visit_method_call" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>internal void visit_method_call(SyntaxTree.method_call _method_call)</Text> <Text>internal void visit_method_call(SyntaxTree.method_call _method_call)</Text>
<OCtx> <OCtx>
@ -1168,9 +1168,9 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="foreach Arr -&gt; for"> <Node Name="foreach Arr -&gt; for" NL="0" NG="0">
<Items> <Items>
<Node Name="visit(SyntaxTree.foreach_stmt"> <Node Name="visit(SyntaxTree.foreach_stmt" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>public override void visit(SyntaxTree.foreach_stmt _foreach_stmt)</Text> <Text>public override void visit(SyntaxTree.foreach_stmt _foreach_stmt)</Text>
<OCtx> <OCtx>
@ -1181,7 +1181,7 @@
</i> </i>
</OCtx> </OCtx>
</Node> </Node>
<Node Name="visit(SyntaxTree.semantic_type_node"> <Node Name="visit(SyntaxTree.semantic_type_node" NL="0" NG="0">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName> <FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>public override void visit(SyntaxTree.semantic_type_node stn)</Text> <Text>public override void visit(SyntaxTree.semantic_type_node stn)</Text>
<OCtx> <OCtx>

View file

@ -1 +1 @@
!define VERSION '3.1.0.1286' !define VERSION '3.1.0.1288'

View file

@ -3790,7 +3790,7 @@ end;
type type
// Вспомогательный класс для генерации бесконечной последовательности целых, начиная с заданного значения // Вспомогательный класс для генерации бесконечной последовательности целых, начиная с заданного значения
IntNumbersClass = class(SeqBaseInteger,IEnumerable<integer>,IEnumerator<integer>) { IntNumbersClass = class(SeqBaseInteger,IEnumerable<integer>,IEnumerator<integer>)
private private
first,cur: integer; first,cur: integer;
public public
@ -3812,7 +3812,7 @@ type
begin begin
cur := first-1; cur := first-1;
end; end;
end; end;}
// Вспомогательный класс для генерации рекуррентных последовательностей // Вспомогательный класс для генерации рекуррентных последовательностей
IterateClass<T> = class(SeqBase<T>,IEnumerable<T>,IEnumerator<T>) IterateClass<T> = class(SeqBase<T>,IEnumerable<T>,IEnumerator<T>)
@ -7911,34 +7911,60 @@ end;
/// Возвращает бесконечную последовательность целых от текущего значения с шагом 1 /// Возвращает бесконечную последовательность целых от текущего значения с шагом 1
function Step(Self: integer): sequence of integer; extensionmethod; function Step(Self: integer): sequence of integer; extensionmethod;
begin begin
Result := IntNumbersClass.Create(Self); //Result := IntNumbersClass.Create(Self);
var s := Self;
while True do
begin
yield s;
s += 1;
end;
end; end;
/// Возвращает бесконечную последовательность целых от текущего значения с шагом step /// Возвращает бесконечную последовательность целых от текущего значения с шагом step
function Step(Self: integer; step: integer): sequence of integer; extensionmethod; function Step(Self: integer; step: integer): sequence of integer; extensionmethod;
begin begin
var slf := Self; {var slf := Self;
Result := IntNumbersClass.Create().Select(x->x*step+slf); Result := IntNumbersClass.Create().Select(x->x*step+slf);}
var s := Self;
while True do
begin
yield s;
s += step;
end;
end; end;
/// Возвращает бесконечную последовательность вещественных от текущего значения с шагом step /// Возвращает бесконечную последовательность вещественных от текущего значения с шагом step
function Step(Self: real; step: real): sequence of real; extensionmethod; function Step(Self: real; step: real): sequence of real; extensionmethod;
begin begin
var slf := Self; {var slf := Self;
Result := IntNumbersClass.Create().Select(x->x*step+slf); Result := IntNumbersClass.Create().Select(x->x*step+slf);}
var s := Self;
while True do
begin
yield s;
s += step;
end;
end; end;
// Возвращает бесконечную последовательность элементов, совпадающих с данным // Возвращает бесконечную последовательность элементов, совпадающих с данным
///-- ///--
function &Repeat<T>(Self: T): sequence of T; extensionmethod; function &Repeat<T>(Self: T): sequence of T; extensionmethod;
begin begin
Result := SeqFill(MaxInt,Self); var s := Self;
while True do
yield s;
end; end;
/// Повторяет последовательность бесконечное число раз /// Повторяет последовательность бесконечное число раз
function Cycle<T>(Self: sequence of T): sequence of T; extensionmethod; function Cycle<T>(Self: sequence of T): sequence of T; extensionmethod;
begin begin
Result := SeqFill(MaxInt,Self).SelectMany(x->x); var s := Self;
while True do
begin
foreach var x in s do
yield x;
end;
// Result := SeqFill(MaxInt,Self).SelectMany(x->x);
end; end;
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@ -8053,7 +8079,7 @@ end;
// Дополнения февраль 2016: MinBy, MaxBy, TakeLast, Slice, Cartesian, SplitAt, // Дополнения февраль 2016: MinBy, MaxBy, TakeLast, Slice, Cartesian, SplitAt,
// Partition, ZipTuple, UnZipTuple, Interleave, Numerate, Tabulate, Pairwise, Batch // Partition, ZipTuple, UnZipTuple, Interleave, Numerate, Tabulate, Pairwise, Batch
/// Возвращает элемент последовательности с минимальным значением ключа /// Возвращает первый элемент последовательности с минимальным значением ключа
function MinBy<T, TKey>(Self: sequence of T; selector: T -> TKey): T; extensionmethod; function MinBy<T, TKey>(Self: sequence of T; selector: T -> TKey): T; extensionmethod;
begin begin
if selector = nil then if selector = nil then
@ -8065,7 +8091,7 @@ begin
Result := Self.Aggregate((min,x)-> comp.Compare(selector(x),selector(min))<0 ? x : min); Result := Self.Aggregate((min,x)-> comp.Compare(selector(x),selector(min))<0 ? x : min);
end; end;
/// Возвращает элемент последовательности с максимальным значением ключа /// Возвращает первый элемент последовательности с максимальным значением ключа
function MaxBy<T, TKey>(Self: sequence of T; selector: T -> TKey): T; extensionmethod; function MaxBy<T, TKey>(Self: sequence of T; selector: T -> TKey): T; extensionmethod;
begin begin
if selector = nil then if selector = nil then
@ -8074,7 +8100,31 @@ begin
raise new InvalidOperationException('Empty sequence'); raise new InvalidOperationException('Empty sequence');
var comp := Comparer&<TKey>.Default; var comp := Comparer&<TKey>.Default;
Result := Self.Aggregate((max,x)-> comp.Compare(selector(x),selector(max))<0 ? max : x); Result := Self.Aggregate((max,x)-> comp.Compare(selector(x),selector(max))>0 ? x : max);
end;
/// Возвращает последний элемент последовательности с минимальным значением ключа
function LastMinBy<T, TKey>(Self: sequence of T; selector: T -> TKey): T; extensionmethod;
begin
if selector = nil then
raise new ArgumentNullException('selector');
if not Self.Any() then
raise new InvalidOperationException('Empty sequence');
var comp := Comparer&<TKey>.Default;
Result := Self.Aggregate((min,x)-> comp.Compare(selector(x),selector(min))<=0 ? x : min);
end;
/// Возвращает последний элемент последовательности с максимальным значением ключа
function LastMaxBy<T, TKey>(Self: sequence of T; selector: T -> TKey): T; extensionmethod;
begin
if selector = nil then
raise new ArgumentNullException('selector');
if not Self.Any() then
raise new InvalidOperationException('Empty sequence');
var comp := Comparer&<TKey>.Default;
Result := Self.Aggregate((max,x)-> comp.Compare(selector(x),selector(max))>=0 ? x : max);
end; end;
/// Возвращает последние count элементов последовательности /// Возвращает последние count элементов последовательности
@ -8228,9 +8278,19 @@ end;
/// Превращает последовательность в последовательность пар соседних элементов /// Превращает последовательность в последовательность пар соседних элементов
function Pairwise<T>(Self: sequence of T): sequence of (T,T); extensionmethod; function Pairwise<T>(Self: sequence of T): sequence of (T,T); extensionmethod;
begin begin
Result := Self.ZipTuple(Self.Skip(1)); var previous: T;
var it := Self.GetEnumerator();
if (it.MoveNext()) then
previous := it.Current;
while (it.MoveNext()) do
begin
yield (previous,it.Current);
previous := it.Current;
end
end; end;
/// Превращает последовательность в последовательность пар соседних элементов, применяет func к каждой паре полученных элементов и получает новую последовательность /// Превращает последовательность в последовательность пар соседних элементов, применяет func к каждой паре полученных элементов и получает новую последовательность
function Pairwise<T,Res>(Self: sequence of T; func:(T,T)->Res): sequence of Res; extensionmethod; function Pairwise<T,Res>(Self: sequence of T; func:(T,T)->Res): sequence of Res; extensionmethod;
begin begin
@ -8500,21 +8560,8 @@ begin
end; end;
end; end;
/// Возвращает индекс первого максимального элемента
function IndexMax<T>(self: array of T): integer; extensionmethod; where T: System.IComparable<T>;
begin
var max := Self[0];
Result := 0;
for var i:=1 to Self.Length-1 do
if Self[i].CompareTo(max)>0 then
begin
Result := i;
max := Self[i];
end;
end;
/// Возвращает индекс первого максимального элемента начиная с позиции start /// Возвращает индекс первого максимального элемента начиная с позиции start
function IndexMax<T>(self: array of T; start: integer): integer; extensionmethod; where T: System.IComparable<T>; function IndexMax<T>(self: array of T; start: integer := 0): integer; extensionmethod; where T: System.IComparable<T>;
begin begin
var max := Self[start]; var max := Self[start];
Result := start; Result := start;
@ -8552,6 +8599,32 @@ begin
end; end;
end; end;
/// Возвращает индекс последнего минимального элемента
function LastIndexMax<T>(Self: array of T): integer; extensionmethod; where T: System.IComparable<T>;
begin
var max := Self[Self.Length-1];
Result := Self.Length-1;
for var i:=Self.Length-2 downto 0 do
if Self[i].CompareTo(max)>0 then
begin
Result := i;
max := Self[i];
end;
end;
/// Возвращает индекс последнего минимального элемента начиная с позиции start
function LastIndexMax<T>(Self: array of T; start: integer): integer; extensionmethod; where T: System.IComparable<T>;
begin
var max := Self[start];
Result := start;
for var i:=start-1 downto 0 do
if Self[i].CompareTo(max)>0 then
begin
Result := i;
max := Self[i];
end;
end;
/// Заменяет в массиве все вхождения одного значения на другое /// Заменяет в массиве все вхождения одного значения на другое
procedure Replace<T>(Self: array of T; oldValue,newValue: T); extensionmethod; procedure Replace<T>(Self: array of T; oldValue,newValue: T); extensionmethod;
begin begin

View file

@ -30,7 +30,7 @@ namespace YieldDesugarSyntaxTreeConverter
#if DEBUG #if DEBUG
try try
{ {
root.visit(new SimplePrettyPrinterVisitor(@"d:\\zzz1.txt")); // root.visit(new SimplePrettyPrinterVisitor(@"d:\\zzz1.txt"));
} }
catch catch
{ {

Binary file not shown.

View file

@ -3790,7 +3790,7 @@ end;
type type
// Вспомогательный класс для генерации бесконечной последовательности целых, начиная с заданного значения // Вспомогательный класс для генерации бесконечной последовательности целых, начиная с заданного значения
IntNumbersClass = class(SeqBaseInteger,IEnumerable<integer>,IEnumerator<integer>) { IntNumbersClass = class(SeqBaseInteger,IEnumerable<integer>,IEnumerator<integer>)
private private
first,cur: integer; first,cur: integer;
public public
@ -3812,7 +3812,7 @@ type
begin begin
cur := first-1; cur := first-1;
end; end;
end; end;}
// Вспомогательный класс для генерации рекуррентных последовательностей // Вспомогательный класс для генерации рекуррентных последовательностей
IterateClass<T> = class(SeqBase<T>,IEnumerable<T>,IEnumerator<T>) IterateClass<T> = class(SeqBase<T>,IEnumerable<T>,IEnumerator<T>)
@ -7911,34 +7911,60 @@ end;
/// Возвращает бесконечную последовательность целых от текущего значения с шагом 1 /// Возвращает бесконечную последовательность целых от текущего значения с шагом 1
function Step(Self: integer): sequence of integer; extensionmethod; function Step(Self: integer): sequence of integer; extensionmethod;
begin begin
Result := IntNumbersClass.Create(Self); //Result := IntNumbersClass.Create(Self);
var s := Self;
while True do
begin
yield s;
s += 1;
end;
end; end;
/// Возвращает бесконечную последовательность целых от текущего значения с шагом step /// Возвращает бесконечную последовательность целых от текущего значения с шагом step
function Step(Self: integer; step: integer): sequence of integer; extensionmethod; function Step(Self: integer; step: integer): sequence of integer; extensionmethod;
begin begin
var slf := Self; {var slf := Self;
Result := IntNumbersClass.Create().Select(x->x*step+slf); Result := IntNumbersClass.Create().Select(x->x*step+slf);}
var s := Self;
while True do
begin
yield s;
s += step;
end;
end; end;
/// Возвращает бесконечную последовательность вещественных от текущего значения с шагом step /// Возвращает бесконечную последовательность вещественных от текущего значения с шагом step
function Step(Self: real; step: real): sequence of real; extensionmethod; function Step(Self: real; step: real): sequence of real; extensionmethod;
begin begin
var slf := Self; {var slf := Self;
Result := IntNumbersClass.Create().Select(x->x*step+slf); Result := IntNumbersClass.Create().Select(x->x*step+slf);}
var s := Self;
while True do
begin
yield s;
s += step;
end;
end; end;
// Возвращает бесконечную последовательность элементов, совпадающих с данным // Возвращает бесконечную последовательность элементов, совпадающих с данным
///-- ///--
function &Repeat<T>(Self: T): sequence of T; extensionmethod; function &Repeat<T>(Self: T): sequence of T; extensionmethod;
begin begin
Result := SeqFill(MaxInt,Self); var s := Self;
while True do
yield s;
end; end;
/// Повторяет последовательность бесконечное число раз /// Повторяет последовательность бесконечное число раз
function Cycle<T>(Self: sequence of T): sequence of T; extensionmethod; function Cycle<T>(Self: sequence of T): sequence of T; extensionmethod;
begin begin
Result := SeqFill(MaxInt,Self).SelectMany(x->x); var s := Self;
while True do
begin
foreach var x in s do
yield x;
end;
// Result := SeqFill(MaxInt,Self).SelectMany(x->x);
end; end;
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@ -8319,6 +8345,121 @@ begin
Result := Self.Skip(from).Where((x,i)->i mod step = 0).Take(count) Result := Self.Skip(from).Where((x,i)->i mod step = 0).Take(count)
end; end;
// Дополнения июль 2016: Incremental
///--
function IncrementalSeq(Self: sequence of integer): sequence of integer;
begin
var iter := Self.GetEnumerator();
if iter.MoveNext() then
begin
var prevItem := iter.Current;
while iter.MoveNext() do
begin
var nextItem := iter.Current;
yield nextItem - prevItem;
prevItem := nextItem;
end
end
end;
///--
function IncrementalSeq(Self: sequence of real): sequence of real;
begin
var iter := Self.GetEnumerator();
if iter.MoveNext() then
begin
var prevItem := iter.Current;
while iter.MoveNext() do
begin
var nextItem := iter.Current;
yield nextItem - prevItem;
prevItem := nextItem;
end
end
end;
/// Возвращает последовательность разностей соседних элементов исходной последовательности
function Incremental(Self: sequence of integer): sequence of integer; extensionmethod;
begin
Result := IncrementalSeq(Self);
end;
/// Возвращает последовательность разностей соседних элементов исходной последовательности
function Incremental(Self: array of integer): sequence of integer; extensionmethod;
begin
Result := IncrementalSeq(Self);
end;
/// Возвращает последовательность разностей соседних элементов исходной последовательности
function Incremental(Self: List<integer>): sequence of integer; extensionmethod;
begin
Result := IncrementalSeq(Self);
end;
/// Возвращает последовательность разностей соседних элементов исходной последовательности
function Incremental(Self: LinkedList<integer>): sequence of integer; extensionmethod;
begin
Result := IncrementalSeq(Self);
end;
/// Возвращает последовательность разностей соседних элементов исходной последовательности
function Incremental(Self: sequence of real): sequence of real; extensionmethod;
begin
Result := IncrementalSeq(Self);
end;
/// Возвращает последовательность разностей соседних элементов исходной последовательности
function Incremental(Self: array of real): sequence of real; extensionmethod;
begin
Result := IncrementalSeq(Self);
end;
/// Возвращает последовательность разностей соседних элементов исходной последовательности
function Incremental(Self: List<real>): sequence of real; extensionmethod;
begin
Result := IncrementalSeq(Self);
end;
/// Возвращает последовательность разностей соседних элементов исходной последовательности
function Incremental(Self: LinkedList<real>): sequence of real; extensionmethod;
begin
Result := IncrementalSeq(Self);
end;
/// Возвращает последовательность разностей соседних элементов исходной последовательности. В качестве функции разности используется func
function Incremental<T,T1>(Self: sequence of T; func: (T,T)->T1): sequence of T1; extensionmethod;
begin
var iter := Self.GetEnumerator();
if iter.MoveNext() then
begin
var prevItem := iter.Current;
while iter.MoveNext() do
begin
var nextItem := iter.Current;
yield func(prevItem,nextItem);
prevItem := nextItem;
end
end
end;
/// Возвращает последовательность разностей соседних элементов исходной последовательности. В качестве функции разности используется func
function Incremental<T,T1>(Self: sequence of T; func: (T,T,integer)->T1): sequence of T1; extensionmethod;
begin
var iter := Self.GetEnumerator();
if iter.MoveNext() then
begin
var ind := 0;
var prevItem := iter.Current;
while iter.MoveNext() do
begin
var nextItem := iter.Current;
ind += 1;
yield func(prevItem,nextItem,ind);
prevItem := nextItem;
end
end
end;
// ----------------------------------------------------- // -----------------------------------------------------
//>> Методы расширения типа List<T> # Extension methods for List T //>> Методы расширения типа List<T> # Extension methods for List T
// ----------------------------------------------------- // -----------------------------------------------------