bug fix #1025
This commit is contained in:
parent
b825635319
commit
f69a84b1d1
45
TestSuite/params11.pas
Normal file
45
TestSuite/params11.pas
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
var i: integer;
|
||||
|
||||
procedure p(b: integer; params a:array of integer);
|
||||
begin
|
||||
i := b;
|
||||
if a.Length > 0 then
|
||||
i := a[0];
|
||||
end;
|
||||
|
||||
procedure p4(b: integer; b2: integer; params a:array of integer);
|
||||
begin
|
||||
i := b;
|
||||
if a.Length > 0 then
|
||||
i := a[0];
|
||||
end;
|
||||
|
||||
procedure p2(self: object; b: integer; params a:array of integer); extensionmethod;
|
||||
begin
|
||||
i := b;
|
||||
if a.Length > 0 then
|
||||
i := a[0];
|
||||
end;
|
||||
|
||||
procedure p3(self: object; params a:array of integer); extensionmethod;
|
||||
begin
|
||||
i := 4;
|
||||
end;
|
||||
|
||||
begin
|
||||
p(2);
|
||||
assert(i = 2);
|
||||
p(2,1,3);
|
||||
assert(i = 1);
|
||||
var o := new object;
|
||||
o.p2(2);
|
||||
assert(i = 2);
|
||||
o.p2(2,1,3);
|
||||
assert(i = 1);
|
||||
o.p3;
|
||||
assert(i = 4);
|
||||
p4(2,2);
|
||||
assert(i = 2);
|
||||
p4(2,1,3);
|
||||
assert(i = 3);
|
||||
end.
|
||||
|
|
@ -1613,9 +1613,9 @@ namespace PascalABCCompiler.TreeConverter
|
|||
//TODO: Можно сделать параметры по умолчанию для откомпилированных функций.
|
||||
if ((exprs.Count < fn.parameters.Count) && (fn.node_kind == SemanticTree.node_kind.common))
|
||||
{
|
||||
if (exprs.Count == 0 && fn.parameters != null && fn.parameters.Count == 1 && fn.parameters[0].is_params ||
|
||||
exprs.Count == 1 && fn.parameters != null && fn is common_namespace_function_node && (fn as common_namespace_function_node).ConnectedToType != null &&
|
||||
fn.parameters.Count == 2 && fn.parameters[1].is_params)
|
||||
if (!(fn is common_namespace_function_node && (fn as common_namespace_function_node).ConnectedToType != null) && fn.parameters != null && fn.parameters.Count - 1 == exprs.Count && fn.parameters[fn.parameters.Count-1].is_params ||
|
||||
fn is common_namespace_function_node && (fn as common_namespace_function_node).ConnectedToType != null && fn.parameters != null
|
||||
&& fn.parameters.Count - 1 == exprs.Count && fn.parameters[fn.parameters.Count - 1].is_params)
|
||||
{
|
||||
statements_expression_node sre = new statements_expression_node(ptcal.snl, ptcal.var_ref, ptcal.var_ref.location);
|
||||
//exprs.remove_range(fn.parameters.Count - 1, exprs.Count - fn.parameters.Count);
|
||||
|
|
@ -1633,9 +1633,9 @@ namespace PascalABCCompiler.TreeConverter
|
|||
}
|
||||
else if ((exprs.Count < fn.parameters.Count) && (fn.node_kind == SemanticTree.node_kind.compiled))
|
||||
{
|
||||
if (exprs.Count == 0 && fn.parameters != null && fn.parameters.Count == 1 && fn.parameters[0].is_params ||
|
||||
exprs.Count == 1 && fn.parameters != null && fn is compiled_function_node && (fn as compiled_function_node).ConnectedToType != null &&
|
||||
fn.parameters.Count == 2 && fn.parameters[1].is_params)
|
||||
if (!(fn is compiled_function_node && (fn as compiled_function_node).ConnectedToType != null) && fn.parameters != null && fn.parameters.Count - 1 == exprs.Count && fn.parameters[fn.parameters.Count - 1].is_params ||
|
||||
fn is compiled_function_node && (fn as compiled_function_node).ConnectedToType != null
|
||||
&& fn.parameters != null && fn.parameters.Count - 1 == exprs.Count && fn.parameters[fn.parameters.Count - 1].is_params)
|
||||
{
|
||||
statements_expression_node sre = new statements_expression_node(ptcal.snl, ptcal.var_ref, ptcal.var_ref.location);
|
||||
exprs.AddElement(sre);
|
||||
|
|
@ -1809,9 +1809,9 @@ namespace PascalABCCompiler.TreeConverter
|
|||
}
|
||||
}
|
||||
}
|
||||
else if ((parameters.Count == 0 && fn.parameters.Count == 1) && fn.parameters[0].is_params && !set_of_possible_functions.Contains(fn))
|
||||
//else if ((parameters.Count == 0 && fn.parameters.Count == 1) && fn.parameters[0].is_params && !set_of_possible_functions.Contains(fn))
|
||||
// SSM 6.08.18 - так просто исправить не получается - видимо, сопоставление параметров работает неверно
|
||||
//else if ((parameters.Count == fn.parameters.Count - 1) && fn.parameters[fn.parameters.Count-1].is_params && !set_of_possible_functions.Contains(fn))
|
||||
else if ((parameters.Count == fn.parameters.Count - 1) && fn.parameters[fn.parameters.Count-1].is_params && !set_of_possible_functions.Contains(fn))
|
||||
set_of_possible_functions.AddElement(fn);
|
||||
else if (fn.num_of_default_parameters != 0 && parameters.Count >= fn.parameters.Count - fn.num_of_default_parameters)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue