diff --git a/PascalABCNET.axml b/PascalABCNET.axml index 93a3f9c16..f84661bbd 100644 --- a/PascalABCNET.axml +++ b/PascalABCNET.axml @@ -1,10 +1,10 @@ - + - + - + \treeconverter\treeconversion\syntax_tree_visitor.cs public override void visit(SyntaxTree.indexer _indexer) @@ -15,7 +15,7 @@ - + \treeconverter\treeconversion\syntax_tree_visitor.cs private void indexer_as_expression_index(expression_node expr, SyntaxTree.expression_list parameters, @@ -26,7 +26,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs public override void visit(SyntaxTree.semantic_expr_node sen) @@ -37,7 +37,7 @@ - + \treeconverter\treeconversion\syntax_tree_visitor.cs var fh = (_procedure_definition.proc_header as SyntaxTree.function_header); @@ -50,9 +50,9 @@ - + - + \treeconverter\treeconversion\syntax_tree_visitor.cs public override void visit(SyntaxTree.assign_tuple _modern_proc_type) @@ -63,7 +63,7 @@ - + \treeconverter\treeconversion\syntax_tree_visitor.cs if (t.FullName.StartsWith("System.Tuple")) @@ -76,9 +76,9 @@ - + - + \treeconverter\treeconversion\syntax_tree_visitor.cs public override void visit(SyntaxTree.enum_type_definition _enum_type_definition) @@ -89,7 +89,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs if (!is_enum) @@ -100,7 +100,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs public override void visit(SyntaxTree.modern_proc_type _modern_proc_type) @@ -113,9 +113,9 @@ - + - + \treeconverter\symboltable\dsst\symboltable.cs int tn=HashTable.Find(Name); //найдем имя в хеше @@ -126,7 +126,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs public override void visit(SyntaxTree.modern_proc_type _modern_proc_type) @@ -139,9 +139,9 @@ - + - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs public override void visit(SyntaxTree.foreach_stmt _foreach_stmt) @@ -152,7 +152,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs public bool FindIEnumerableElementType(SyntaxTree.foreach_stmt _foreach_stmt, type_node tn, ref type_node elem_type) @@ -163,7 +163,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs if (tn is compiled_type_node || tn is compiled_generic_instance_type_node) // Если этот тип зашит в .NET @@ -176,9 +176,9 @@ - + - + \treeconverter\lambdaexpressions\lambdaresulttypeinferrer.cs private type_node GetMostCommonType(int kind = 0) @@ -189,7 +189,7 @@ - + \treeconverter\treeconversion\syntax_tree_visitor.cs // SSM 20.07.13 если это - узел с коротким определением функции без типа возвращаемого значения, то вывести этот тип @@ -200,7 +200,7 @@ - + \SyntaxTree\tree\TreeHelper.cs public object RealSemTypeOfResExpr = null; // Result := ex; - семантический тип ex - нужно для лучщего выбора среди перегруженных методов с параметрами-лямбдами @@ -211,7 +211,7 @@ - + \codecompletion\expressionvisitor.cs public override void visit ( assign _assign ) @@ -221,7 +221,7 @@ - + \treeconverter\treeconversion\lambdahelper.cs public class ResultNodesSearcher : SyntaxTree.WalkingVisitorNew @@ -237,7 +237,7 @@ public override void visit ( assign value ) - + \TreeConverter\LambdaExpressions\LambdaResultTypeInferrer.cs internal class LambdaResultTypeInferrer : WalkingVisitorNew @@ -259,7 +259,7 @@ public override void visit ( var_def_statement varStmt ) - + \treeconverter\treeconversion\lambdahelper.cs retType.real_type = new LambdaResultTypeInferrer(funcHeader, procBody, visitor).InferResultType(); @@ -272,7 +272,7 @@ - + \treeconverter\treeconversion\syntax_tree_visitor.cs visit_lambda_header(_procedure_definition.proc_header as SyntaxTree.function_header, _procedure_definition.proc_body); @@ -283,7 +283,7 @@ - + \treeconverter\treeconversion\syntax_tree_visitor.cs hard_node_test_and_visit(_procedure_definition.proc_body); @@ -294,7 +294,7 @@ - + \treeconverter\treeconversion\syntax_tree_visitor.cs hard_node_test_and_visit(_procedure_definition.proc_header); @@ -305,7 +305,7 @@ - + \treeconverter\treeconversion\syntax_tree_visitor.cs if (context.top_function.return_value_type == null) @@ -316,7 +316,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs if (context.top_function.return_value_type == null) @@ -329,9 +329,9 @@ - + - + \treeconverter\treeconversion\syntax_tree_visitor.cs public override void visit(SyntaxTree.question_colon_expression node) @@ -342,7 +342,7 @@ - + \treeconverter\treeconversion\syntax_tree_visitor.cs private void dot_node_as_expression_dot_ident(expression_node en, SyntaxTree.ident id_right, motivation mot, addressed_value syntax_node) @@ -353,7 +353,7 @@ - + \treeconverter\treeconversion\syntax_tree_visitor.cs public override void visit(SyntaxTree.indexer _indexer) @@ -364,7 +364,7 @@ - + \parsers\pascalabcparsernewsaushkin\semanticrules.cs public expression NewVariable(addressed_value variable, expression var_specifiers, LexLocation loc) @@ -377,9 +377,9 @@ - + - + \treeconverter\treeconversion\convertion_data_and_alghoritms.cs public function_node select_function(expressions_list parameters, SymbolInfo functions, location loc, List<SyntaxTree.expression> syntax_nodes_parameters = null) @@ -390,7 +390,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs internal void visit_method_call(SyntaxTree.method_call _method_call) @@ -401,7 +401,7 @@ - + \treeconverter\treeconversion\convertion_data_and_alghoritms.cs function_node inst = generic_convertions.DeduceFunction(func, parameters, @@ -414,9 +414,9 @@ - + - + \treeconverter\treeconversion\syntax_tree_visitor.cs public override void visit(SyntaxTree.procedure_definition _procedure_definition) @@ -427,7 +427,7 @@ - + \treeconverter\treeconversion\syntax_tree_visitor.cs if (ttt is undefined_type) @@ -438,7 +438,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs // SSM 12/04/16 - short func definitions - calc return_value_type @@ -451,9 +451,9 @@ - + - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs public override void visit ( SyntaxTree . function_lambda_definition _function_lambda_definition ) @@ -463,7 +463,7 @@ - + \TreeConverter\TreeConversion\LambdaHelper.cs public static void InferTypesFromVarStmt(type_node leftType, function_lambda_definition lambdaDef, syntax_tree_visitor visitor) @@ -474,7 +474,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs public override void visit(SyntaxTree.assign _assign) @@ -485,7 +485,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs public override void visit(SyntaxTree.var_def_statement _var_def_statement) @@ -496,7 +496,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs MaybeConvertFunctionLambdaDefinitionToProcedureLambdaDefinition(fld1); @@ -507,7 +507,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs LambdaHelper.InferTypesFromVarStmt(tn, _var_def_statement.inital_value as SyntaxTree.function_lambda_definition, this); //lroman// @@ -518,7 +518,7 @@ - + \TreeConverter\TreeConversion\LambdaHelper.cs //throw new SimpleSemanticError(visitor.get_location(lambdaDef), "UNABLE_TO_CONVERT_FUNCTIONAL_TYPE_TO_PROCEDURAL_TYPE"); @@ -529,7 +529,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs AddError(loc, "FUNCTION_EXPECTED_PROCEDURE_{0}_MEET", fn); @@ -540,9 +540,9 @@ - + - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs private base_function_call create_not_static_method_call(function_node fn, expression_node en, location loc, bool procedure_allowed) @@ -557,9 +557,9 @@ - + - + \Compiler\Compiler.cs CurrentUnit.SyntaxTree = syntaxTreeConvertersController.Convert(CurrentUnit.SyntaxTree) as SyntaxTree.compilation_unit; @@ -570,7 +570,7 @@ - + \Compiler\SemanticTreeConverters\SemanticTreeConvertersController.cs public class SemanticTreeConvertersController @@ -592,7 +592,7 @@ public SemanticTree . IProgramNode Convert ( SemanticTree . IProgramNode ProgramNode ) - + \Compiler\Compiler.cs public SyntaxTreeConvertersController SyntaxTreeConvertersController @@ -603,7 +603,7 @@ - + \Compiler\SyntaxTreeConvertersController\SyntaxTreeConvertersController.cs foreach (ISyntaxTreeConverter SyntaxTreeConverter in syntaxTreeConverters) @@ -616,9 +616,9 @@ - + - + \codecompletion\domconverter.cs if (pattern != null || pattern != "") @@ -629,7 +629,7 @@ - + \visualplugins\languageconverter\source\textformatter.cs _word.Replace(specSymbol, ""); @@ -640,7 +640,7 @@ - + \visualpascalabcnet\formsdesignerbinding\dependecies\src\main\base\project\src\services\refactoringservice\refactoringservice.cs result.OrderBy(node => node.Content.FullyQualifiedName); @@ -651,9 +651,9 @@ - + - + \treeconverter\treeconversion\syntax_tree_visitor.cs if (_pascal_set_constant.values != null && _pascal_set_constant.values != null) @@ -664,7 +664,7 @@ - + \visualpascalabcnet\workbench\runnermanagerhandlers.cs if (File.Exists(pdbFileName) && File.Exists(pdbFileName)) @@ -675,7 +675,7 @@ - + \visualpascalabcnet\formsdesignerbinding\dependecies\src\main\base\project\src\editor\codecompletion\nrefactoryinsightwindowhandler.cs Вот здесь то место, где не учитывается один вариант открывающих скобок Вместо одного из openBracketToken нужно написать openBracesToken @@ -690,9 +690,9 @@ - + - + \treeconverter\systemlib\static_executors.cs if (value >= int.MinValue && value <= int.MaxValue) @@ -703,7 +703,7 @@ - + \treeconverter\systemlib\static_executors.cs if (value >= long.MinValue && value <= long.MaxValue) @@ -714,7 +714,7 @@ - + \NETGenerator\NETGenerator.cs if (pos <= 255) il.Emit(OpCodes.Starg_S, pos); @@ -725,7 +725,7 @@ - + \NETGenerator\NETGenerator.cs if (pos <= 255) il.Emit(OpCodes.Starg_S, pos); @@ -736,7 +736,7 @@ - + \NETGenerator\NETGenerator.cs if (pos <= 255) il.Emit(OpCodes.Ldarga_S, pos); @@ -749,7 +749,7 @@ - + \codecompletion\findreferences.cs Двумя строчками ниже (Здесь сказывается недостаток моего инструмента - если в методе есть две одинаковые строчки - переход осуществляется только на первую, а надо на вторую) @@ -762,7 +762,7 @@ - + \parsertools\syntaxtreevisitors\syntaxtreecomparer.cs 597 и 631 строки в текущей версии else if (left is int64_const) @@ -774,7 +774,7 @@ - + \parsertools\syntaxtreevisitors\syntaxtreecomparer.cs 1599 1611 @@ -790,9 +790,9 @@ - + - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs expression_node bfcint = make_read_call(si, _method_call.parameters, subloc2); @@ -803,7 +803,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs private expression_node make_read_call ( SymbolInfo si , SyntaxTree . expression_list parameters , location loc ) @@ -813,7 +813,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs Это - непонятное место из-за которого происходит ошибка readln_string_file = true; @@ -825,7 +825,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs if (!readln_string_file) @@ -838,7 +838,7 @@ - + \treeconverter\treeconversion\syntax_tree_visitor.cs visit_program_code(_block.program_code); @@ -849,7 +849,7 @@ - + \treeconverter\treeconversion\syntax_tree_visitor.cs if (lab.is_defined) @@ -860,9 +860,9 @@ - + - + \SyntaxVisitors\YieldVisitors\ProcessYieldsCapturedVars.cs public override void visit(procedure_definition pd) @@ -873,7 +873,7 @@ - + \Yield\YieldConversionSyntax\YieldDesugarSyntaxTreeConverter.cs root.visit(new ProcessYieldCapturedVarsVisitor()); @@ -884,9 +884,9 @@ - + - + \syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs public ConstructFiniteAutomata1(block bl) @@ -897,7 +897,7 @@ - + \syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs type_declarations GenClassesForYield(procedure_definition pd, @@ -910,7 +910,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs string Consts__Self = YieldHelpers.YieldConsts.Self; @@ -921,7 +921,7 @@ - + \syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs function_header nfh = ObjectCopier.Clone(fh); @@ -932,7 +932,7 @@ - + \treeconverter\treeconversion\syntax_tree_visitor.cs private Dictionary<Guid, semantic_type_node> _yieldForeachTypeMap = new Dictionary<Guid, semantic_type_node>(); @@ -943,7 +943,7 @@ - + \syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs //InsertHelperMethod(pd, pdCloned); // SSM 13.07.16 - вызов этого метода можно не добавлять @@ -954,9 +954,9 @@ - + - + \treeconverter\treeconversion\syntax_tree_visitor.cs public override void visit(SyntaxTree.yield_unknown_expression_type _unk_expr) @@ -967,7 +967,7 @@ - + \treeconverter\treeconversion\syntax_tree_visitor.cs public override void visit(SyntaxTree.assign _assign) @@ -978,7 +978,7 @@ - + \netgenerator\netgenerator.cs TypeInfo ti = helper.GetTypeReference(value.type); @@ -991,9 +991,9 @@ - + - + \treeconverter\treeconversion\syntax_tree_visitor.cs public override void visit(SyntaxTree.yield_unknown_foreach_type _unk) @@ -1004,7 +1004,7 @@ - + \syntaxvisitors\yieldvisitors\loweringvisitor.cs stl.Add(new assign(currentIdent, new dot_node(enumeratorIdent, "Current"))); @@ -1015,7 +1015,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs public override void visit(SyntaxTree.assign _assign) @@ -1026,7 +1026,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs else if (to.type is compiled_type_node) @@ -1037,7 +1037,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs public bool FindIEnumerableElementType ( type_node tn , ref type_node elem_type ) @@ -1047,7 +1047,7 @@ - + \TreeConverter\TreeRealization\generics.cs generic_convertions.all_type_instances.Add(instance); @@ -1058,7 +1058,7 @@ - + \TreeConverter\TreeRealization\generics.cs if (shouldAddToAllTypeInstances) //lroman// Если зашли сюда при выведении типов параметров лямбды, то тип инстанцироваться может с типом lambda_any_type_node. Поэтому, если выводим типы. То данную инстанцию не добавляем @@ -1069,7 +1069,7 @@ - + \syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs class ConstructFiniteAutomata @@ -1092,7 +1092,7 @@ - + \syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs ReplaceCapturedVariables(pd, dld.LocalDeletedDefs, out CapturedLocalsNamesMap, out CapturedFormalParamsNamesMap); @@ -1103,7 +1103,7 @@ - + \syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs var pdCloned = ObjectCopier.Clone(pd); @@ -1114,7 +1114,7 @@ - + \syntaxvisitors\YieldVisitors\MarkMethodHasYieldVisitor.cs if (pd.has_yield) // SSM bug fix #219 @@ -1125,11 +1125,33 @@ + + \SyntaxVisitors\YieldVisitors\RenameSameBlockLocalVarsVisitor.cs + public class RenameSameBlockLocalVarsVisitor : BaseChangeVisitor + + public class RenameSameBlockLocalVarsVisitor : BaseChangeVisitor + namespace SyntaxVisitors + + + + + private List < Dictionary < string , string > > BlockNamesStack + private Dictionary < string , int > BlockNamesCounter + private int CurrentLevel = - 1 + public RenameSameBlockLocalVarsVisitor ( ) + public static RenameSameBlockLocalVarsVisitor New + public static void Accept ( procedure_definition pd ) + public override void visit ( declarations decls ) + public override void visit ( procedure_header pd ) + public override void visit ( function_header fh ) + public override void visit ( formal_parameters fp ) + + - + - + \TreeConverter\TreeConversion\convertion_data_and_alghoritms.cs return AddError<function_node>(new SeveralFunctionsCanBeCalled(loc,set_of_possible_functions)); @@ -1140,7 +1162,7 @@ - + \TreeConverter\TreeConversion\convertion_data_and_alghoritms.cs if (funcs.Count == 2) @@ -1153,9 +1175,9 @@ - + - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs internal void visit_method_call(SyntaxTree.method_call _method_call) @@ -1168,9 +1190,9 @@ - + - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs public override void visit(SyntaxTree.foreach_stmt _foreach_stmt) @@ -1181,7 +1203,7 @@ - + \TreeConverter\TreeConversion\syntax_tree_visitor.cs public override void visit(SyntaxTree.semantic_type_node stn) diff --git a/SyntaxVisitors/YieldVisitors/LoweringVisitor.cs b/SyntaxVisitors/YieldVisitors/LoweringVisitor.cs index f66f96079..f07ca5254 100644 --- a/SyntaxVisitors/YieldVisitors/LoweringVisitor.cs +++ b/SyntaxVisitors/YieldVisitors/LoweringVisitor.cs @@ -321,7 +321,11 @@ namespace SyntaxVisitors ProcessNode(wn.statements); - var if0 = new if_node(un_expr.Not(wn.expr), gotoBreak); + statement if0; + //if (wn.expr is ident && (wn.expr as ident).name.ToLower() == "true") + // if0 = gotoBreak; + //else + if0 = new if_node(un_expr.Not(wn.expr), gotoBreak); var lb2 = new labeled_statement(gotoContinue.label, if0); // continue var lb1 = new labeled_statement(gotoBreak.label); // break diff --git a/SyntaxVisitors/YieldVisitors/ProcessYieldsCapturedVars.cs b/SyntaxVisitors/YieldVisitors/ProcessYieldsCapturedVars.cs index f5c103030..fb8646b13 100644 --- a/SyntaxVisitors/YieldVisitors/ProcessYieldsCapturedVars.cs +++ b/SyntaxVisitors/YieldVisitors/ProcessYieldsCapturedVars.cs @@ -745,6 +745,7 @@ namespace SyntaxVisitors // Collect formal params CollectFormalParams(pd, CollectedFormalParams); CollectFormalParamsNames(pd, CollectedFormalParamsNames); + // Collect class fields CollectClassFieldsNames(pd, CollectedClassFieldsNames); // Collect class methods @@ -893,7 +894,7 @@ namespace SyntaxVisitors pd.visit(checkVarRedefVisitor); */ - // Выносим выражение с лямбдой из yield + // Выносим выражение из yield в отдельную переменную ReplaceYieldExprByVarVisitor.Accept(pd); // Раскрываем операторы yield sequence. На семантике они не существуют @@ -906,6 +907,19 @@ namespace SyntaxVisitors // Переименовываем одинаковые имена в мини-ПИ: begin var a := 1 end; begin var a := 1 end; RenameSameBlockLocalVarsVisitor.Accept(pd); + // SSM 01/08/16 - надо захватить и переименовать еще все формальные параметры. + // Это решит проблему их изменения в pd при следующем вызове запроса. + var bb = pd.proc_body as block; + if (pd.proc_header.parameters != null) + { + var fpids = pd.proc_header.parameters.params_list.SelectMany(tp => tp.idents.idents); + foreach (var v in fpids) + { + var vds = new var_statement(new ident("$fp_"+v.name, v.source_context), v); + bb.program_code.AddFirst(vds); + } + } + // Теперь lowering LoweringVisitor.Accept(pd); @@ -914,8 +928,8 @@ namespace SyntaxVisitors // Обработка метода для корректного захвата локальных переменных и их типов // - это уже не надо - иногда можно включать чтобы посмотреть, что собой представляет функция после Loweringа - //IEnumerable localsClonesCollection; - //CreateLocalVariablesTypeProxies(pd, out localsClonesCollection); + IEnumerable localsClonesCollection; + CreateLocalVariablesTypeProxies(pd, out localsClonesCollection); // frninja 16/11/15: перенес ниже чтобы работал захват для lowered for diff --git a/SyntaxVisitors/YieldVisitors/RenameSameBlockLocalVarsVisitor.cs b/SyntaxVisitors/YieldVisitors/RenameSameBlockLocalVarsVisitor.cs index dba6df2ae..049e873d7 100644 --- a/SyntaxVisitors/YieldVisitors/RenameSameBlockLocalVarsVisitor.cs +++ b/SyntaxVisitors/YieldVisitors/RenameSameBlockLocalVarsVisitor.cs @@ -48,18 +48,36 @@ namespace SyntaxVisitors } } - public override void visit(procedure_header pd) + public override void visit(procedure_header proc_header) { - // DO NOTHING + // DO THIS THING! } + private bool first_time_visit_function_header = true; public override void visit(function_header fh) { + if (first_time_visit_function_header) + { + DefaultVisit(fh); + first_time_visit_function_header = false; + } // DO NOTHING } public override void visit(formal_parameters fp) { + if (!first_time_visit_function_header) // чтобы в лямбдах не заходить в формальные параметры. Во вложенных тоже не зайдёт + return; + ++CurrentLevel; + BlockNamesStack.Add(new Dictionary()); + if (fp != null) + { + var fpids = fp.params_list.SelectMany(tp => tp.idents.idents); + foreach (var v in fpids) + { + BlockNamesStack[CurrentLevel].Add(v.name, "$fp_"+v.name); + } + } // DO NOTHING } diff --git a/TestSuite/yieldChangeFormalParams.pas b/TestSuite/yieldChangeFormalParams.pas new file mode 100644 index 000000000..cf7e5b3bf --- /dev/null +++ b/TestSuite/yieldChangeFormalParams.pas @@ -0,0 +1,13 @@ +function Step1(Self: integer): sequence of integer; extensionmethod; +begin + while True do + begin + yield Self; + Self += 1; + end; +end; + +begin + Assert(5.Step1.Take(10).SequenceEqual(Range(5,14))); + Assert(5.Step1.Take(10).SequenceEqual(Range(5,14))); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index b2859f434..d68f8c9f6 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -19199,7 +19199,11 @@ namespace PascalABCCompiler.TreeConverter public override void visit(SyntaxTree.yield_node yn) { - // подузлы не обходим! + // надо что то сгенерировать, иначе выдается ложное предупреждение о недостижимом коде и проч. + var ass = new assign("Result", new nil_const()); + visit(ass); + var pc = new procedure_call("exit"); + visit(pc); } /*public SyntaxTree.question_colon_expression ConvertToQCE(dot_question_node dqn) diff --git a/Yield/YieldConversionSyntax/YieldDesugarSyntaxTreeConverter.cs b/Yield/YieldConversionSyntax/YieldDesugarSyntaxTreeConverter.cs index 4af44b28c..5d62ea8ac 100644 --- a/Yield/YieldConversionSyntax/YieldDesugarSyntaxTreeConverter.cs +++ b/Yield/YieldConversionSyntax/YieldDesugarSyntaxTreeConverter.cs @@ -30,7 +30,7 @@ namespace YieldDesugarSyntaxTreeConverter #if DEBUG try { - // root.visit(new SimplePrettyPrinterVisitor(@"d:\\zzz1.txt")); + root.visit(new SimplePrettyPrinterVisitor(@"d:\\zzz1.txt")); } catch { diff --git a/bin/Lib/PABCRtl.dll b/bin/Lib/PABCRtl.dll index 75d4f5201..28757cfe4 100644 Binary files a/bin/Lib/PABCRtl.dll and b/bin/Lib/PABCRtl.dll differ