This commit is contained in:
parent
198faa5bf5
commit
2d2798c711
|
|
@ -1,4 +1,5 @@
|
|||
type
|
||||
//!Параметр метода не может иметь имя Self
|
||||
type
|
||||
T = class
|
||||
public procedure p(self: integer) := exit;
|
||||
end;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
begin
|
||||
//!Неверное количество параметров функции
|
||||
begin
|
||||
var a:=Arr(1);
|
||||
Write(a[a.GetLowerBound]);
|
||||
end.
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
function f(i: integer): boolean;
|
||||
//!Неверное количество параметров функции
|
||||
function f(i: integer): boolean;
|
||||
begin
|
||||
|
||||
end;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
function f(i: integer): boolean;
|
||||
//!Неверное количество параметров функции
|
||||
function f(i: integer): boolean;
|
||||
begin
|
||||
|
||||
end;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
function f(i: integer): boolean;
|
||||
//!Неверное количество параметров функции
|
||||
function f(i: integer): boolean;
|
||||
begin
|
||||
|
||||
end;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
function f(i: integer): string;
|
||||
//!Нельзя преобразовать тип function(i: integer): string к string
|
||||
function f(i: integer): string;
|
||||
begin
|
||||
|
||||
end;
|
||||
|
|
|
|||
15
TestSuite/errors/err0437.pas
Normal file
15
TestSuite/errors/err0437.pas
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
//!Несколько подпрограмм могут быть вызваны
|
||||
procedure p0(o: pointer) := exit;
|
||||
procedure p0(o: array of integer) := exit;
|
||||
|
||||
procedure p1(p: ()->()) := exit;
|
||||
|
||||
begin
|
||||
p1(()-> //Ошибка: Неверный тип переменной, которой присваивается лямбда-выражение
|
||||
begin
|
||||
|
||||
// если закомментировать эту строчку - ошибки нет
|
||||
p0(nil);
|
||||
|
||||
end);
|
||||
end.
|
||||
|
|
@ -141,6 +141,15 @@ namespace PascalABCCompiler.TreeConverter
|
|||
this.ErrResourceString = ErrResourceString;
|
||||
this.values = values;
|
||||
}
|
||||
|
||||
public string ErrorResourceString
|
||||
{
|
||||
get
|
||||
{
|
||||
return ErrResourceString;
|
||||
}
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
if (values != null)
|
||||
|
|
|
|||
|
|
@ -7329,6 +7329,7 @@ namespace PascalABCCompiler.TreeConverter
|
|||
}
|
||||
// SSM 21.05.14 - попытка обработать перегруженные функции с параметрами-лямбдами с различными возвращаемыми значениями
|
||||
List<function_node> spf = null;
|
||||
SeveralFunctionsCanBeCalled sf_error = null;
|
||||
try
|
||||
{
|
||||
function_node fn = convertion_data_and_alghoritms.select_function(exprs, sil2, subloc2, syntax_nodes_parameters);
|
||||
|
|
@ -7356,6 +7357,7 @@ namespace PascalABCCompiler.TreeConverter
|
|||
}
|
||||
catch (SeveralFunctionsCanBeCalled sf)
|
||||
{
|
||||
sf_error = sf;
|
||||
spf = sf.set_of_possible_functions; // Возможны несколько перегруженных версий - надо выводить дальше в надежде что какие-то уйдут и останется одна
|
||||
}
|
||||
|
||||
|
|
@ -7407,7 +7409,19 @@ namespace PascalABCCompiler.TreeConverter
|
|||
if (restype != null)
|
||||
realrestype = restype.real_type;
|
||||
|
||||
LambdaHelper.InferTypesFromVarStmt(fn.parameters[exprCounter].type, fld, this);
|
||||
try
|
||||
{
|
||||
LambdaHelper.InferTypesFromVarStmt(fn.parameters[exprCounter].type, fld, this);
|
||||
}
|
||||
catch (SimpleSemanticError err)
|
||||
{
|
||||
if (err.ErrorResourceString == "ILLEGAL_LAMBDA_VARIABLE_TYPE" && spf != null)
|
||||
{
|
||||
AddError(new SeveralFunctionsCanBeCalled(sf_error.loc, spf));
|
||||
}
|
||||
else
|
||||
AddError(err);
|
||||
}
|
||||
fld.lambda_visit_mode = LambdaVisitMode.VisitForAdvancedMethodCallProcessing; //lroman
|
||||
fld.lambda_name = LambdaHelper.GetAuxiliaryLambdaName(lambdaName); // поправляю имя. Думаю, назад возвращать не надо. ПРОВЕРИТЬ!
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue