From b800461c6c1cec64bb5151a0e2319dc4b6dd3165 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: Sun, 17 May 2020 13:42:43 +0200 Subject: [PATCH] bug fix #2154 --- .../errors/err0359_deduce_without_brackets.pas | 14 ++++++++++++++ .../TreeConversion/syntax_tree_visitor.cs | 11 ++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 TestSuite/errors/err0359_deduce_without_brackets.pas diff --git a/TestSuite/errors/err0359_deduce_without_brackets.pas b/TestSuite/errors/err0359_deduce_without_brackets.pas new file mode 100644 index 000000000..398366214 --- /dev/null +++ b/TestSuite/errors/err0359_deduce_without_brackets.pas @@ -0,0 +1,14 @@ +type + t0 = class + procedure p1 := exit; + end; + + t1 = class + function f1: t0 := nil; + end; + +begin + var b := new t1; + b.f1.p1; + +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index e5cd3cd93..78420f652 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -1434,6 +1434,7 @@ namespace PascalABCCompiler.TreeConverter { if (obj == null) obj = GetCurrentObjectReference(cmn.cont_type.Scope, cmn, loc);//new this_node(context.converted_type, loc); + common_method_call cmc = new common_method_call(cmn, obj, loc); cmc.virtual_call = !inherited_ident_processing; bfc = cmc; @@ -9372,6 +9373,15 @@ namespace PascalABCCompiler.TreeConverter bfc = create_static_method_call_with_params(fn, bfc.location, fn.return_value_type, true, bfc.parameters); } } + if (bfc is common_method_call) + { + common_method_node cmn = (bfc as common_method_call).function_node; + if (cmn != null && cmn.is_generic_function && !cmn.is_generic_function_instance && cmn.parameters.Count == 0) + { + cmn = (common_method_node)generic_convertions.DeduceFunction(cmn, new expressions_list(), true, context, bfc.location); + bfc = new common_method_call(cmn, (bfc as common_method_call).obj, bfc.location); + } + } return bfc; } @@ -9756,7 +9766,6 @@ namespace PascalABCCompiler.TreeConverter } try_convert_typed_expression_to_function_call(ref en); - switch (mot) { case motivation.address_receiving: