From f3299e06676d67f3cf78d467e86fa01433ad5e9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D0=BE=D0=BD=D0=B4=D0=B0=D1=80=D0=B5=D0=B2=20=D0=98?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD?= Date: Tue, 17 Apr 2018 21:48:29 +0200 Subject: [PATCH] bug fix #739 --- TestSuite/CompilationSamples/Data.pas | 18 ++++++++++++++++++ .../convertion_data_and_alghoritms.cs | 1 - .../TreeConversion/syntax_tree_visitor.cs | 6 ++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 TestSuite/CompilationSamples/Data.pas diff --git a/TestSuite/CompilationSamples/Data.pas b/TestSuite/CompilationSamples/Data.pas new file mode 100644 index 000000000..bbde24154 --- /dev/null +++ b/TestSuite/CompilationSamples/Data.pas @@ -0,0 +1,18 @@ +unit Data; + +//обязательно params +procedure p2(params o: array of Exception) := exit;//не обязательно короткая процедура + +procedure p1 :=//не обязательно короткая процедура +try + if true then + p2(nil); +except + //обязательно on do и использование переменной исключения в процедуре с params + on e: Exception do + + p2(e); + +end; + +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs index a35d46ca6..73d51af19 100644 --- a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs +++ b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs @@ -903,7 +903,6 @@ namespace PascalABCCompiler.TreeConverter vdn = syntax_tree_visitor.context.add_field(get_temp_arr_name(), loc, pr.type, polymorphic_state.ps_static); else vdn = syntax_tree_visitor.context.add_var_definition_in_entry_scope(get_temp_arr_name(), loc); - } else if (syntax_tree_visitor.context.converted_type != null) vdn = syntax_tree_visitor.context.add_field(get_temp_arr_name(), loc, pr.type, polymorphic_state.ps_static); diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 6c7131b54..23197a96d 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -1798,6 +1798,12 @@ namespace PascalABCCompiler.TreeConverter statement_node stm = convert_strong(eh.statements); context.leave_code_block(); sl = convertion_data_and_alghoritms.statement_list_stack.pop(); + if (sl.statements.Count > 0 || sl.local_variables.Count > 0) + { + sl.statements.AddElement(stm); + stm = sl; + } + exception_filter ef = new exception_filter(filter_type, lvr, stm, get_location(eh)); efl.AddElement(ef); current_catch_excep = null;