diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index 2f0f59e8a..3e19a7342 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "2"; public const string Build = "0"; - public const string Revision = "1377"; + public const string Revision = "1379"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index 4ed997dfa..b67b1c9f9 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ %COREVERSION%=0 -%REVISION%=1377 +%REVISION%=1379 %MINOR%=2 %MAJOR%=3 diff --git a/Localization/DefaultLang.resources b/Localization/DefaultLang.resources index 666cf2fa3..3749fec65 100644 Binary files a/Localization/DefaultLang.resources and b/Localization/DefaultLang.resources differ diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs b/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs index 77cf3aae6..fe7b0682e 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: DESKTOP-8EAQPI9 -// DateTime: 09.01.2017 15:07:29 +// DateTime: 21.01.2017 21:29:18 // UserName: ????????? // GPLEX input file // GPLEX frame file diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascal.y b/Parsers/PascalABCParserNewSaushkin/ABCPascal.y index 0490813d7..319e30b2e 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascal.y +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascal.y @@ -2945,6 +2945,7 @@ default_expr tuple : tkRoundOpen expr_l1 tkComma expr_l1_list lambda_type_ref optional_full_lambda_fp_list tkRoundClose // lambda_type_ref optional_full_lambda_fp_list { + /* ($4 as expression_list).expressions.Insert(0,$2); if (($4 as expression_list).expressions.Count>7) parsertools.AddErrorFromResource("TUPLE_ELEMENTS_COUNT_MUST_BE_LESSEQUAL_7",@5); @@ -2955,7 +2956,15 @@ tuple { var dn = new dot_node(new dot_node(new ident("?System"),new ident("Tuple")),new ident("Create",@$)); $$ = new method_call(dn,$4 as expression_list,@$); - } + }*/ + + /*if ($5 != null) + parsertools.AddErrorFromResource("BAD_TUPLE",@5); + if ($6 != null) + parsertools.AddErrorFromResource("BAD_TUPLE",@6);*/ + + ($4 as expression_list).expressions.Insert(0,$2); + $$ = new tuple_node_for_formatter($4 as expression_list,@$); } ; diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs b/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs index 0f92338ea..488a501be 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs @@ -2,7 +2,7 @@ // GPPG version 1.3.6 // Machine: DESKTOP-8EAQPI9 -// DateTime: 09.01.2017 15:07:30 +// DateTime: 21.01.2017 21:29:18 // UserName: ????????? // Input file @@ -4902,17 +4902,26 @@ public partial class GPPGParser: ShiftReduceParser tkRoundOpen, expr_l1, tkComma, expr_l1_list, lambda_type_ref, // optional_full_lambda_fp_list, tkRoundClose { - (ValueStack[ValueStack.Depth-4].stn as expression_list).expressions.Insert(0,ValueStack[ValueStack.Depth-6].ex); - if ((ValueStack[ValueStack.Depth-4].stn as expression_list).expressions.Count>7) - parsertools.AddErrorFromResource("TUPLE_ELEMENTS_COUNT_MUST_BE_LESSEQUAL_7",LocationStack[LocationStack.Depth-3]); + /* + ($4 as expression_list).expressions.Insert(0,$2); + if (($4 as expression_list).expressions.Count>7) + parsertools.AddErrorFromResource("TUPLE_ELEMENTS_COUNT_MUST_BE_LESSEQUAL_7",@5); if (parsertools.build_tree_for_formatter) - CurrentSemanticValue.ex = new tuple_node_for_formatter(ValueStack[ValueStack.Depth-4].stn as expression_list,CurrentLocationSpan); + $$ = new tuple_node_for_formatter($4 as expression_list,@$); else { - var dn = new dot_node(new dot_node(new ident("?System"),new ident("Tuple")),new ident("Create",CurrentLocationSpan)); - CurrentSemanticValue.ex = new method_call(dn,ValueStack[ValueStack.Depth-4].stn as expression_list,CurrentLocationSpan); - } + var dn = new dot_node(new dot_node(new ident("?System"),new ident("Tuple")),new ident("Create",@$)); + $$ = new method_call(dn,$4 as expression_list,@$); + }*/ + + /*if ($5 != null) + parsertools.AddErrorFromResource("BAD_TUPLE",@5); + if ($6 != null) + parsertools.AddErrorFromResource("BAD_TUPLE",@6);*/ + + (ValueStack[ValueStack.Depth-4].stn as expression_list).expressions.Insert(0,ValueStack[ValueStack.Depth-6].ex); + CurrentSemanticValue.ex = new tuple_node_for_formatter(ValueStack[ValueStack.Depth-4].stn as expression_list,CurrentLocationSpan); } break; case 596: // factor -> tkNil diff --git a/Parsers/PascalABCParserNewSaushkin/PABC.ymc b/Parsers/PascalABCParserNewSaushkin/PABC.ymc index ac04448a6..1d4d53090 100644 --- a/Parsers/PascalABCParserNewSaushkin/PABC.ymc +++ b/Parsers/PascalABCParserNewSaushkin/PABC.ymc @@ -155,6 +155,8 @@ script= + + diff --git a/PascalABCNET.axml b/PascalABCNET.axml index 80b604808..cf3345811 100644 --- a/PascalABCNET.axml +++ b/PascalABCNET.axml @@ -358,10 +358,10 @@ \TreeConverter\TreeConversion\syntax_tree_visitor.cs - public override void visit(SyntaxTree.assign_var_tuple assvartup) + public override void visit(SyntaxTree.assign_var_tuple assvartup) // сахарный узел public override void visit ( SyntaxTree . assign_var_tuple assvartup ) - public class syntax_tree_visitor : SyntaxTree . WalkingVisitorNew + public partial class syntax_tree_visitor : SyntaxTree . WalkingVisitorNew namespace PascalABCCompiler . TreeConverter diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index fe17cddb9..8c86c8cc4 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.2.0.1377' +!define VERSION '3.2.0.1379' diff --git a/StandardSyntaxTreeConverter/StandardSyntaxConverter.cs b/StandardSyntaxTreeConverter/StandardSyntaxConverter.cs index 372901fd7..03ad4f0a4 100644 --- a/StandardSyntaxTreeConverter/StandardSyntaxConverter.cs +++ b/StandardSyntaxTreeConverter/StandardSyntaxConverter.cs @@ -20,9 +20,15 @@ namespace PascalABCCompiler.SyntaxTreeConverters // Выносим выражения с лямбдами из заголовка foreach StandOutExprWithLambdaInForeachSequenceVisitor.New.ProcessNode(root); + //--- Обработка синтаксически сахарных узлов + + // tuple_node + TupleVisitor.New.ProcessNode(root); + + // assign_tuple и assign_var_tuple AssignTuplesDesugarVisitor.New.ProcessNode(root); - // Пока не доделали + // slice_expr и slice_expr_question SliceQuestionDesugarVisitor.New.ProcessNode(root); // Всё, связанное с yield diff --git a/SyntaxVisitors/SyntaxVisitors.csproj b/SyntaxVisitors/SyntaxVisitors.csproj index 5a6ded099..00c9a1be5 100644 --- a/SyntaxVisitors/SyntaxVisitors.csproj +++ b/SyntaxVisitors/SyntaxVisitors.csproj @@ -50,6 +50,7 @@ + diff --git a/TestSuite/SlicesForGenericArrays.pas b/TestSuite/SliceArrGeneric.pas similarity index 100% rename from TestSuite/SlicesForGenericArrays.pas rename to TestSuite/SliceArrGeneric.pas diff --git a/TreeConverter/TreeConversion/semantic_checks_for_sugar.cs b/TreeConverter/TreeConversion/semantic_checks_for_sugar.cs index 87de7ce55..621405818 100644 --- a/TreeConverter/TreeConversion/semantic_checks_for_sugar.cs +++ b/TreeConverter/TreeConversion/semantic_checks_for_sugar.cs @@ -34,18 +34,24 @@ namespace PascalABCCompiler.TreeConverter if (semvar is typed_expression) semvar = convert_typed_expression_to_function_call(semvar as typed_expression); - var t = ConvertSemanticTypeNodeToNETType(semvar.type); - var IsSlicedType = 0; // проверим, является ли semvar.type динамическим массивом, списком List или строкой - // semvar.type должен быть array of T, List или string - if (t == null) - IsSlicedType = 0; // можно ничего не присваивать :) - else if (t.IsArray) + if (semvar.type.type_special_kind == SemanticTree.type_special_kind.array_kind) IsSlicedType = 1; - else if (t == typeof(System.String)) - IsSlicedType = 2; - else if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(System.Collections.Generic.List<>)) - IsSlicedType = 3; + + if (IsSlicedType == 0) + { + var t = ConvertSemanticTypeNodeToNETType(semvar.type); // не работает для array of T + + // semvar.type должен быть array of T, List или string + if (t == null) + IsSlicedType = 0; // можно ничего не присваивать :) +// else if (t.IsArray) +// IsSlicedType = 1; + else if (t == typeof(System.String)) + IsSlicedType = 2; + else if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(System.Collections.Generic.List<>)) + IsSlicedType = 3; + } if (IsSlicedType == 0) AddError(get_location(sl.v), "BAD_SLICE_OBJECT"); @@ -67,6 +73,12 @@ namespace PascalABCCompiler.TreeConverter if (!b) AddError(get_location(sl.step), "INTEGER_VALUE_EXPECTED"); } + + } + void semantic_check_tuple(SyntaxTree.tuple_node_for_formatter tup) + { + if (tup.el.expressions.Count > 7) + AddError(get_location(tup),"TUPLE_ELEMENTS_COUNT_MUST_BE_LESSEQUAL_7"); } } } diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index aba1a6d39..c508ce535 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -19022,19 +19022,10 @@ namespace PascalABCCompiler.TreeConverter public override void visit(matching_expression _matching_expression) { - SyntaxTree.procedure_call pc = new SyntaxTree.procedure_call(); - SyntaxTree.method_call mc = new SyntaxTree.method_call(); - dot_node dot = new dot_node(new ident("PABCSystem"), new ident("KV")); - mc.dereferencing_value = dot; - pc.func_name = mc; - pc.source_context = _matching_expression.source_context; - SyntaxTree.expression_list exl = new PascalABCCompiler.SyntaxTree.expression_list(); - exl.Add(_matching_expression.left); - exl.Add(_matching_expression.right); - mc.parameters = exl; - visit(pc); + throw new NotSupportedError(get_location(_matching_expression)); } - public override void visit(SyntaxTree.sequence_type _sequence_type) + + public override void visit(SyntaxTree.sequence_type _sequence_type) // сахарный узел { // SSM 11/05/15 sugared node var l = new List(); @@ -19047,7 +19038,8 @@ namespace PascalABCCompiler.TreeConverter _sequence_type.source_context); visit(tr); } - public override void visit(SyntaxTree.modern_proc_type _modern_proc_type) + + public override void visit(SyntaxTree.modern_proc_type _modern_proc_type) // сахарный узел { if (_modern_proc_type.res != null) { @@ -19142,62 +19134,7 @@ namespace PascalABCCompiler.TreeConverter return null; } - public override void visit(SyntaxTree.assign_tuple asstup) - { - AddError(get_location(asstup), "SUGARED_NODE_{0}_IN_SYNTAX_TREE_VISITOR", asstup.GetType().Name); - - /*semantic_check_assign_tuple(asstup); - - var tname = "#temp_var" + UniqueNumStr(); - - //var tt = new var_statement(new ident(tname), new semantic_addr_value(expr)); // тут semantic_addr_value хранит на самом деле expr - просто неудачное название - var tt = new var_statement(new ident(tname), asstup.expr); // тут semantic_addr_value хранит на самом деле expr - просто неудачное название - var st = new statement_list(tt); - - var n = asstup.vars.variables.Count(); - for (var i = 0; i < n; i++) - { - var a = new assign(asstup.vars.variables[i], new dot_node(new ident(tname), - new ident("Item" + (i + 1).ToString())), Operators.Assignment, - asstup.vars.variables[i].source_context); - st.Add(a); - } - visit(st); - // Замена 1 оператор на 1 оператор - всё OK - ReplaceUsingParent(asstup, st);*/ - } - - public override void visit(SyntaxTree.assign_var_tuple assvartup) - { - AddError(get_location(assvartup), "SUGARED_NODE_{0}_IN_SYNTAX_TREE_VISITOR", assvartup.GetType().Name); - - /*check_sugared(assvartup); - - var tname = "#temp_var" + UniqueNumStr(); - - var tt = new var_statement(new ident(tname), assvartup.expr); // тут для assvartup.expr внутри повторно вызывается convert_strong, это плохо, но если там лямбда, то иначе - с semantic_addr_value - не работает!!! - //var tt = new var_statement(new ident(tname), new semantic_addr_value(expr)); // тут semantic_addr_value хранит на самом деле expr - просто неудачное название - visit(tt); // обходится первый элемент - вместо asstup - - var sl = new List(); - sl.Add(tt); // он же помещается в новое синтаксическое дерево - - var n = assvartup.vars.variables.Count(); - for (var i = 0; i < n; i++) - { - var rr = assvartup.vars.variables[i] as ident; - var a = new var_statement(rr, - new dot_node(new ident(tname),new ident("Item" + (i + 1).ToString())), - assvartup.vars.variables[i].source_context - ); - // Остальные элементы обходить не надо (!!!уже надо!) - они обходятся на следующих итерациях при обходе внешнего statement_list - //visit(a); - sl.Add(a); - } - ReplaceStatementUsingParent(assvartup, sl);*/ - } - - expression_list construct_expression_list_for_slice_expr(SyntaxTree.slice_expr sl) + /*expression_list construct_expression_list_for_slice_expr(SyntaxTree.slice_expr sl) { // situation = 0 - ничего не пропущено // situation = 1 - пропущен from @@ -19223,37 +19160,7 @@ namespace PascalABCCompiler.TreeConverter el.Add(sl.step); return el; - } - - public override void visit(SyntaxTree.slice_expr sl) - { - AddError(get_location(sl), "SUGARED_NODE_{0}_IN_SYNTAX_TREE_VISITOR", sl.GetType().Name); - - /* - // Преобразуется в вызов a.SystemSlice(situation,from,to,step) - // Тип a должен быть array of T, List или string - semcheck(sl); - - // Действия уровня синтаксиса. Можно вынести на синтаксический уровень как desugaring для сахарного узла - var el = construct_expression_list_for_slice_expr(sl); - var mc = new method_call(new dot_node(sl.v, new ident("SystemSlice", sl.v.source_context), sl.v.source_context), el, sl.source_context); - - visit(mc);*/ - } - - public override void visit(SyntaxTree.slice_expr_question sl) - { - AddError(get_location(sl), "SUGARED_NODE_{0}_IN_SYNTAX_TREE_VISITOR", sl.GetType().Name); - /* - // Преобразуется в вызов a.SystemSlice(situation,from,to,step) - // Тип a должен быть array of T, List или string - semcheck(sl); - - var el = construct_expression_list_for_slice_expr(sl); - var mc = new method_call(new dot_node(sl.v, new ident("SystemSliceQuestion", sl.v.source_context), sl.v.source_context), el, sl.source_context); - - visit(mc);*/ - } + }*/ // frninja 04/03/16 - для yield @@ -19420,6 +19327,23 @@ namespace PascalABCCompiler.TreeConverter visit(pc); } + /*public SyntaxTree.question_colon_expression ConvertToQCE(dot_question_node dqn) + { + // Неверно работает. Пока не используется. Доделать + addressed_value left = dqn.left; + addressed_value right = dqn.right; + var eq = new bin_expr(left, new nil_const(), Operators.Equal, left.source_context); + var dn = new dot_node(left, right, dqn.source_context); + var q = new SyntaxTree.question_colon_expression(eq, new nil_const(), dn, dqn.source_context); + return q; + } + public override void visit(SyntaxTree.dot_question_node dqn) + { + // a?.b + var q = ConvertToQCE(dqn); + visit(q); + }*/ + public override void visit(SyntaxTree.semantic_check_sugared_statement_node st) { if (st.stat is SyntaxTree.assign_tuple) @@ -19428,20 +19352,20 @@ namespace PascalABCCompiler.TreeConverter } else { - AddError(get_location(st), "MISSED_SEMANTIC_CHECK_FOR_SUGARED_NODE_{0}"); + AddError(get_location(st), "MISSED_SEMANTIC_CHECK_FOR_SUGARED_NODE_{0}", st.GetType().Name); } ret.reset(); // обязательно очистить - этот узел в семантику ничего не должен приносить! } public override void visit(SyntaxTree.sugared_expression ex) { - /*if (ex.sugared_expr is SyntaxTree.slice_expr) // и slice_expr_question + if (ex.sugared_expr is SyntaxTree.tuple_node_for_formatter) { - //semantic_check_slice_expr(ex.sugared_expr as SyntaxTree.slice_expr); + semantic_check_tuple(ex.sugared_expr as SyntaxTree.tuple_node_for_formatter); } - else*/ + else { - AddError(get_location(ex), "MISSED_SEMANTIC_CHECK_FOR_SUGARED_NODE_{0}"); + AddError(get_location(ex), "MISSED_SEMANTIC_CHECK_FOR_SUGARED_NODE_{0}", ex.GetType().Name); } ProcessNode(ex.new_expr); // обойти десахарное выражение - обязательно ProcessNode - visit нельзя! @@ -19455,27 +19379,95 @@ namespace PascalABCCompiler.TreeConverter } else { - AddError(get_location(av), "MISSED_SEMANTIC_CHECK_FOR_SUGARED_NODE_{0}"); + AddError(get_location(av), "MISSED_SEMANTIC_CHECK_FOR_SUGARED_NODE_{0}", av.GetType().Name); } ProcessNode(av.new_addr_value); // обойти десахарное } - /*public SyntaxTree.question_colon_expression ConvertToQCE(dot_question_node dqn) - { - // Неверно работает. Пока не используется. Доделать - addressed_value left = dqn.left; - addressed_value right = dqn.right; - var eq = new bin_expr(left, new nil_const(), Operators.Equal, left.source_context); - var dn = new dot_node(left, right, dqn.source_context); - var q = new SyntaxTree.question_colon_expression(eq, new nil_const(), dn, dqn.source_context); - return q; - } - public override void visit(SyntaxTree.dot_question_node dqn) - { - // a?.b - var q = ConvertToQCE(dqn); - visit(q); - }*/ + public override void visit(SyntaxTree.assign_tuple asstup) // сахарный узел + { + AddError(get_location(asstup), "SUGARED_NODE_{0}_IN_SYNTAX_TREE_VISITOR", asstup.GetType().Name); + + /*semantic_check_assign_tuple(asstup); + + var tname = "#temp_var" + UniqueNumStr(); + + //var tt = new var_statement(new ident(tname), new semantic_addr_value(expr)); // тут semantic_addr_value хранит на самом деле expr - просто неудачное название + var tt = new var_statement(new ident(tname), asstup.expr); // тут semantic_addr_value хранит на самом деле expr - просто неудачное название + var st = new statement_list(tt); + + var n = asstup.vars.variables.Count(); + for (var i = 0; i < n; i++) + { + var a = new assign(asstup.vars.variables[i], new dot_node(new ident(tname), + new ident("Item" + (i + 1).ToString())), Operators.Assignment, + asstup.vars.variables[i].source_context); + st.Add(a); + } + visit(st); + // Замена 1 оператор на 1 оператор - всё OK + ReplaceUsingParent(asstup, st);*/ + } + + public override void visit(SyntaxTree.assign_var_tuple assvartup) // сахарный узел + { + AddError(get_location(assvartup), "SUGARED_NODE_{0}_IN_SYNTAX_TREE_VISITOR", assvartup.GetType().Name); + + /*check_sugared(assvartup); + + var tname = "#temp_var" + UniqueNumStr(); + + var tt = new var_statement(new ident(tname), assvartup.expr); // тут для assvartup.expr внутри повторно вызывается convert_strong, это плохо, но если там лямбда, то иначе - с semantic_addr_value - не работает!!! + //var tt = new var_statement(new ident(tname), new semantic_addr_value(expr)); // тут semantic_addr_value хранит на самом деле expr - просто неудачное название + visit(tt); // обходится первый элемент - вместо asstup + + var sl = new List(); + sl.Add(tt); // он же помещается в новое синтаксическое дерево + + var n = assvartup.vars.variables.Count(); + for (var i = 0; i < n; i++) + { + var rr = assvartup.vars.variables[i] as ident; + var a = new var_statement(rr, + new dot_node(new ident(tname),new ident("Item" + (i + 1).ToString())), + assvartup.vars.variables[i].source_context + ); + // Остальные элементы обходить не надо (!!!уже надо!) - они обходятся на следующих итерациях при обходе внешнего statement_list + //visit(a); + sl.Add(a); + } + ReplaceStatementUsingParent(assvartup, sl);*/ + } + + public override void visit(SyntaxTree.slice_expr sl) // сахарный узел + { + AddError(get_location(sl), "SUGARED_NODE_{0}_IN_SYNTAX_TREE_VISITOR", sl.GetType().Name); + + /* + // Преобразуется в вызов a.SystemSlice(situation,from,to,step) + // Тип a должен быть array of T, List или string + semcheck(sl); + + // Действия уровня синтаксиса. Можно вынести на синтаксический уровень как desugaring для сахарного узла + var el = construct_expression_list_for_slice_expr(sl); + var mc = new method_call(new dot_node(sl.v, new ident("SystemSlice", sl.v.source_context), sl.v.source_context), el, sl.source_context); + + visit(mc);*/ + } + + public override void visit(SyntaxTree.slice_expr_question sl) // сахарный узел + { + AddError(get_location(sl), "SUGARED_NODE_{0}_IN_SYNTAX_TREE_VISITOR", sl.GetType().Name); + /* + // Преобразуется в вызов a.SystemSlice(situation,from,to,step) + // Тип a должен быть array of T, List или string + semcheck(sl); + + var el = construct_expression_list_for_slice_expr(sl); + var mc = new method_call(new dot_node(sl.v, new ident("SystemSliceQuestion", sl.v.source_context), sl.v.source_context), el, sl.source_context); + + visit(mc);*/ + } } } diff --git a/TreeConverter/TreeConverter.csproj b/TreeConverter/TreeConverter.csproj index 0cf669dd1..8ca3835e9 100644 --- a/TreeConverter/TreeConverter.csproj +++ b/TreeConverter/TreeConverter.csproj @@ -168,7 +168,6 @@ Code - diff --git a/bin/Lib/PABCRtl.dll b/bin/Lib/PABCRtl.dll index 13c4989f6..fd7f35e67 100644 Binary files a/bin/Lib/PABCRtl.dll and b/bin/Lib/PABCRtl.dll differ diff --git a/bin/Lng/Eng/PascalABCParser.dat b/bin/Lng/Eng/PascalABCParser.dat index 47d58e3c7..4188deb1d 100644 --- a/bin/Lng/Eng/PascalABCParser.dat +++ b/bin/Lng/Eng/PascalABCParser.dat @@ -49,7 +49,6 @@ ONE_TKIDENTIFIER=Expected identefier ONE_OPERATOR=Expected operator ONE_STMT=Expected statement BAD_TUPLE=Badly formed Tuple -TUPLE_ELEMENTS_COUNT_MUST_BE_LESSEQUAL_7=Count of Tuple elements must be <=7 EMPTY_STATEMENT_IN_SHORT_PROC_DEFINITION=Statement expected diff --git a/bin/Lng/Eng/SemanticErrors_ms.dat b/bin/Lng/Eng/SemanticErrors_ms.dat index 3681c51a8..44871ca1e 100644 --- a/bin/Lng/Eng/SemanticErrors_ms.dat +++ b/bin/Lng/Eng/SemanticErrors_ms.dat @@ -10,4 +10,5 @@ ONLY_IN_SHORT_FUNC_DEFS_RETURN_TYPE_CANBE_OMITTED=Only in short function definit ONE_TKIDENTIFIER=Type here must be identifier SUGARED_NODE_{0}_IN_SYNTAX_TREE_VISITOR=Sugared node {0} must not be visited in syntax_tree_visitor MISSED_SEMANTIC_CHECK_FOR_SUGARED_NODE_{0}=Missed semantic check for sugared node {0} +TUPLE_ELEMENTS_COUNT_MUST_BE_LESSEQUAL_7=Count of Tuple elements must be <=7 diff --git a/bin/Lng/Rus/PascalABCParser.dat b/bin/Lng/Rus/PascalABCParser.dat index df371e888..4b2f93415 100644 --- a/bin/Lng/Rus/PascalABCParser.dat +++ b/bin/Lng/Rus/PascalABCParser.dat @@ -49,7 +49,6 @@ ONE_TKIDENTIFIER=Ожидался идентификатор ONE_OPERATOR=Ожидался оператор ONE_STMT=Ожидался оператор BAD_TUPLE=Неправильно сформированный кортеж -TUPLE_ELEMENTS_COUNT_MUST_BE_LESSEQUAL_7=Количество элементов кортежа не должно быть больше 7 EMPTY_STATEMENT_IN_SHORT_PROC_DEFINITION=Ожидался оператор DUPLICATE_NAMES_IN_ANON_TYPE=Анонимный тип не может содержать поля с одинаковыми именами diff --git a/bin/Lng/Rus/SemanticErrors_ms.dat b/bin/Lng/Rus/SemanticErrors_ms.dat index b6ab547d3..d739192e3 100644 --- a/bin/Lng/Rus/SemanticErrors_ms.dat +++ b/bin/Lng/Rus/SemanticErrors_ms.dat @@ -10,3 +10,4 @@ ONLY_IN_SHORT_FUNC_DEFS_RETURN_TYPE_CANBE_OMITTED=Только в коротки ONE_TKIDENTIFIER=В качестве типа ожидался идентификатор SUGARED_NODE_{0}_IN_SYNTAX_TREE_VISITOR=Сахарный узел {0} не должен обходиться в syntax_tree_visitor. Обратитесь к разработчикам PascalABC.NET MISSED_SEMANTIC_CHECK_FOR_SUGARED_NODE_{0}=Отсутствует семантическая проверка для сахарного узла {0} +TUPLE_ELEMENTS_COUNT_MUST_BE_LESSEQUAL_7=Количество элементов кортежа не должно быть больше 7