diff --git a/CompilerTools/EventedStreamReaderList.cs b/CompilerTools/EventedStreamReaderList.cs index 9e97207aa..c2b745c75 100644 --- a/CompilerTools/EventedStreamReaderList.cs +++ b/CompilerTools/EventedStreamReaderList.cs @@ -159,7 +159,7 @@ namespace PascalABCCompiler } } - catch + catch (Exception ex) { Remove(so.Ident); } diff --git a/NETGenerator/NETGenerator.cs b/NETGenerator/NETGenerator.cs index e4a3fd86d..fd70f3d25 100644 --- a/NETGenerator/NETGenerator.cs +++ b/NETGenerator/NETGenerator.cs @@ -7262,6 +7262,8 @@ namespace PascalABCCompiler.NETGenerator //вызов статического метода public override void visit(SemanticTree.ICommonStaticMethodCallNode value) { + if (comp_opt.dbg_attrs == DebugAttributes.Release && has_debug_conditional_attr(helper.GetMethod(value.static_method).mi)) + return; //if (save_debug_info) //MarkSequencePoint(value.Location); IExpressionNode[] real_parameters = value.real_parameters; diff --git a/TestSuite/errors/err0418.pas b/TestSuite/errors/err0418.pas new file mode 100644 index 000000000..38572e1ab --- /dev/null +++ b/TestSuite/errors/err0418.pas @@ -0,0 +1,8 @@ +function f(i: integer): boolean; +begin + +end; +begin + if f then + exit; +end. \ No newline at end of file diff --git a/TestSuite/errors/err0419.pas b/TestSuite/errors/err0419.pas new file mode 100644 index 000000000..087f7631d --- /dev/null +++ b/TestSuite/errors/err0419.pas @@ -0,0 +1,8 @@ +function f(i: integer): boolean; +begin + +end; +begin + while f do + exit; +end. \ No newline at end of file diff --git a/TestSuite/errors/err0420.pas b/TestSuite/errors/err0420.pas new file mode 100644 index 000000000..eec6d99ef --- /dev/null +++ b/TestSuite/errors/err0420.pas @@ -0,0 +1,9 @@ +function f(i: integer): boolean; +begin + +end; +begin + repeat + + until f; +end. \ No newline at end of file diff --git a/TestSuite/errors/err0421.pas b/TestSuite/errors/err0421.pas new file mode 100644 index 000000000..5e9ef1f5e --- /dev/null +++ b/TestSuite/errors/err0421.pas @@ -0,0 +1,12 @@ +function f(i: integer): string; +begin + +end; + +procedure p(s: string); +begin + +end; +begin + p(f); +end. \ No newline at end of file diff --git a/TestSuite/errors/err0422.pas b/TestSuite/errors/err0422.pas new file mode 100644 index 000000000..db02b58e2 --- /dev/null +++ b/TestSuite/errors/err0422.pas @@ -0,0 +1,8 @@ +function f(i: integer): string; +begin + +end; + +begin + writeln(f.GetType); +end. \ No newline at end of file diff --git a/TestSuite/errors/err0423.pas b/TestSuite/errors/err0423.pas new file mode 100644 index 000000000..cd79e4a88 --- /dev/null +++ b/TestSuite/errors/err0423.pas @@ -0,0 +1,10 @@ +function f(i: integer): integer; +begin + +end; + +begin + case f of + 1: writeln(2); + end; +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index e0d7b6440..46bb30af8 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -15666,7 +15666,7 @@ namespace PascalABCCompiler.TreeConverter { expression_node condition = convert_strong(_if_node.condition); condition = convertion_data_and_alghoritms.convert_type(condition, SystemLibrary.SystemLibrary.bool_type); - + try_convert_typed_expression_to_function_call(ref condition, true); // SSM 29/08/16 /*var cc = condition as bool_const_node; if (cc != null && cc.constant_value == false && _if_node.else_body == null) @@ -15722,7 +15722,7 @@ namespace PascalABCCompiler.TreeConverter { expression_node expr = convert_strong(_while_node.expr); expr = convertion_data_and_alghoritms.convert_type(expr, SystemLibrary.SystemLibrary.bool_type); - + try_convert_typed_expression_to_function_call(ref expr, true); CheckToEmbeddedStatementCannotBeADeclaration(_while_node.statements); while_node wn = new while_node(expr, get_location(_while_node)); @@ -15770,6 +15770,7 @@ namespace PascalABCCompiler.TreeConverter rep.body = st; expression_node expr = convert_strong(_repeat_node.expr); expr = convertion_data_and_alghoritms.convert_type(expr, SystemLibrary.SystemLibrary.bool_type); + try_convert_typed_expression_to_function_call(ref expr, true); rep.condition = expr; context.cycle_stack.pop(); return_value(rep);