From aaebcf48c98db158cc7ee10c20bf10f0f4b25ec2 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: Fri, 25 Aug 2017 19:54:34 +0200 Subject: [PATCH] bug fix #471 --- TestSuite/defaultparams1.pas | 13 +++++++++++++ TreeConverter/TreeConversion/syntax_tree_visitor.cs | 2 +- TreeConverter/TreeRealization/types.cs | 6 ++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/TestSuite/defaultparams1.pas b/TestSuite/defaultparams1.pas index 5f1ca33a0..623b3e9d2 100644 --- a/TestSuite/defaultparams1.pas +++ b/TestSuite/defaultparams1.pas @@ -33,6 +33,16 @@ begin raise new Exception; end; +type + TClass=class + + function f(a: integer := 1; b: integer := 2): integer; + begin + Result:=2; + end; + + end; + begin assert(test3=4); assert(test(2)=3); @@ -48,4 +58,7 @@ assert(k = 6); tt(ff); assert(ArrRandomReal <> nil); assert(ArrRandomReal.Any = true); +var obj := new TClass; +var l := obj.f; +assert(l = 2); end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index b46926e7f..8d96829b2 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -14940,7 +14940,7 @@ namespace PascalABCCompiler.TreeConverter { if (is_event) AddError(get_location(_var_def_statement), "EVENT_MUST_HAVE_TYPE"); - expression_node cn = convert_strong_to_constant_or_function_call_for_varinit(convert_strong(_var_def_statement.inital_value)); + expression_node cn = convert_strong_to_constant_or_function_call_for_varinit(convert_strong(_var_def_statement.inital_value)); if (cn is constant_node) (cn as constant_node).SetType(DeduceType(cn.type, get_location(_var_def_statement.inital_value))); inital_value = cn; diff --git a/TreeConverter/TreeRealization/types.cs b/TreeConverter/TreeRealization/types.cs index f45fafa83..306343e3a 100644 --- a/TreeConverter/TreeRealization/types.cs +++ b/TreeConverter/TreeRealization/types.cs @@ -4113,6 +4113,12 @@ namespace PascalABCCompiler.TreeRealization if (cnfn.num_of_default_parameters == cnfn.parameters.Count) return bfc; } + else if (bfc.function is common_method_node) + { + common_method_node cmn = bfc.function as common_method_node; + if (cmn.num_of_default_parameters == cmn.parameters.Count) + return bfc; + } else if (bfc.function is compiled_function_node) { compiled_function_node cfn = bfc.function as compiled_function_node;