This commit is contained in:
parent
fbbcb276aa
commit
6bc05f0f90
21
TestSuite/errors/err0529.pas
Normal file
21
TestSuite/errors/err0529.pas
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
//!Несколько подпрограмм proc1 могут быть вызваны
|
||||
type
|
||||
c1 = class
|
||||
// обязательно метод. с подпрограммой не воспроизводится
|
||||
procedure method1(act: System.Action);
|
||||
begin end;
|
||||
end;
|
||||
|
||||
procedure proc1(par1: System.Action<integer>); begin end;
|
||||
procedure proc1(par1: System.Action<real>); begin end;
|
||||
|
||||
begin
|
||||
var var1:= new c1;
|
||||
|
||||
var1.method1(
|
||||
()-> begin
|
||||
proc1(par1-> begin end);
|
||||
end
|
||||
);
|
||||
|
||||
end.
|
||||
|
|
@ -1268,9 +1268,12 @@ namespace PascalABCCompiler.TreeConverter
|
|||
}
|
||||
else
|
||||
{
|
||||
if (!(left is typed_expression))
|
||||
if (!(left is typed_expression) && !(left.type is delegated_methods))
|
||||
AddError(new OperatorCanNotBeAppliedToThisTypes(name, left, right, loc));
|
||||
bfc = ((left as typed_expression).type as delegated_methods).proper_methods[0];
|
||||
if (left is typed_expression)
|
||||
bfc = ((left as typed_expression).type as delegated_methods).proper_methods[0];
|
||||
else
|
||||
bfc = (left.type as delegated_methods).proper_methods[0];
|
||||
left = convertion_data_and_alghoritms.explicit_convert_type(left, CreateDelegate(bfc.simple_function_node));
|
||||
}
|
||||
|
||||
|
|
@ -5777,8 +5780,8 @@ namespace PascalABCCompiler.TreeConverter
|
|||
var fl = fld.lambda_visit_mode;
|
||||
|
||||
// запомнили типы параметров лямбды - SSM
|
||||
object[] realparamstype = new object[fld.formal_parameters.params_list.Count]; // здесь хранятся выведенные типы лямбд или null если типы явно заданы
|
||||
for (var k = 0; k < fld.formal_parameters.params_list.Count; k++)
|
||||
object[] realparamstype = new object[fld.formal_parameters != null ? fld.formal_parameters.params_list.Count : 0]; // здесь хранятся выведенные типы лямбд или null если типы явно заданы
|
||||
for (var k = 0; k < (fld.formal_parameters != null ? fld.formal_parameters.params_list.Count : 0); k++)
|
||||
{
|
||||
var laminftypeK = fld.formal_parameters.params_list[k].vars_type as SyntaxTree.lambda_inferred_type;
|
||||
if (laminftypeK == null)
|
||||
|
|
@ -5833,7 +5836,7 @@ namespace PascalABCCompiler.TreeConverter
|
|||
if (restype != null)
|
||||
restype.real_type = realrestype;
|
||||
// восстанавливаем сохраненные типы параметров лямбды, которые не были заданы явно
|
||||
for (var k = 0; k < fld.formal_parameters.params_list.Count; k++)
|
||||
for (var k = 0; k < (fld.formal_parameters != null ? fld.formal_parameters.params_list.Count:0); k++)
|
||||
{
|
||||
var laminftypeK = fld.formal_parameters.params_list[k].vars_type as SyntaxTree.lambda_inferred_type;
|
||||
if (laminftypeK != null)
|
||||
|
|
|
|||
Loading…
Reference in a new issue