diff --git a/PascalABCNET.axml b/PascalABCNET.axml index 698d5766e..80b604808 100644 --- a/PascalABCNET.axml +++ b/PascalABCNET.axml @@ -413,12 +413,12 @@ - + \treeconverter\treeconversion\syntax_tree_visitor.cs public override void visit(SyntaxTree.enum_type_definition _enum_type_definition) public override void visit ( SyntaxTree . enum_type_definition _enum_type_definition ) - public class syntax_tree_visitor : SyntaxTree . AbstractVisitor + public partial class syntax_tree_visitor : SyntaxTree . WalkingVisitorNew namespace PascalABCCompiler . TreeConverter diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 4a365994c..aba1a6d39 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -19227,8 +19227,9 @@ namespace PascalABCCompiler.TreeConverter public override void visit(SyntaxTree.slice_expr sl) { - //AddError(get_location(sl), "SUGARED_NODE_{0}_IN_SYNTAX_TREE_VISITOR", sl.GetType().Name); + 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); @@ -19237,13 +19238,13 @@ namespace PascalABCCompiler.TreeConverter 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); + 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); - + 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); @@ -19251,7 +19252,7 @@ namespace PascalABCCompiler.TreeConverter 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); + visit(mc);*/ } // frninja 04/03/16 - для yield diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor_semcheck_helper.cs b/TreeConverter/TreeConversion/syntax_tree_visitor_semcheck_helper.cs deleted file mode 100644 index 10d39bcb3..000000000 --- a/TreeConverter/TreeConversion/syntax_tree_visitor_semcheck_helper.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using PascalABCCompiler.SyntaxTree; -using PascalABCCompiler.TreeRealization; - -namespace PascalABCCompiler.TreeConverter -{ - public partial class syntax_tree_visitor - { - void semcheck_slice_expr_helper(SyntaxTree.slice_expr sl) - { - var semvar = convert_strong(sl.v); - 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) - 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"); - - var semfrom = convert_strong(sl.from); - var b = convertion_data_and_alghoritms.can_convert_type(semfrom, SystemLibrary.SystemLibrary.integer_type); - if (!b) - AddError(get_location(sl.from), "INTEGER_VALUE_EXPECTED"); - - var semto = convert_strong(sl.to); - b = convertion_data_and_alghoritms.can_convert_type(semto, SystemLibrary.SystemLibrary.integer_type); - if (!b) - AddError(get_location(sl.to), "INTEGER_VALUE_EXPECTED"); - - if (sl.step != null) - { - var semstep = convert_strong(sl.step); - b = convertion_data_and_alghoritms.can_convert_type(semstep, SystemLibrary.SystemLibrary.integer_type); - if (!b) - AddError(get_location(sl.step), "INTEGER_VALUE_EXPECTED"); - } - } - public void semcheck(SyntaxTree.slice_expr sl) - { - semcheck_slice_expr_helper(sl); - } - public void semcheck(SyntaxTree.slice_expr_question sl) - { - semcheck_slice_expr_helper(sl); - } - } -} diff --git a/bin/Lib/PABCRtl.dll b/bin/Lib/PABCRtl.dll index e42bc21dd..13c4989f6 100644 Binary files a/bin/Lib/PABCRtl.dll and b/bin/Lib/PABCRtl.dll differ