This commit is contained in:
parent
c86877149e
commit
6eb2b98fa5
17
TestSuite/errors/err0514_lambda_inferred_type.pas
Normal file
17
TestSuite/errors/err0514_lambda_inferred_type.pas
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
//!Нельзя преобразовать тип char к Nullable<integer>
|
||||||
|
var o: object;
|
||||||
|
|
||||||
|
procedure p0<T>(f: () -> T);
|
||||||
|
begin
|
||||||
|
o := f();
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
p0(()->
|
||||||
|
begin
|
||||||
|
Result := default(integer?);
|
||||||
|
//Ошибка: Нельзя преобразовать тип integer к Nullable<integer>
|
||||||
|
Result := '5';
|
||||||
|
end);
|
||||||
|
assert(System.Nullable&<integer>(o) = System.Nullable&<integer>(5));
|
||||||
|
end.
|
||||||
16
TestSuite/nullable13.pas
Normal file
16
TestSuite/nullable13.pas
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
var o: object;
|
||||||
|
|
||||||
|
procedure p0<T>(f: () -> T);
|
||||||
|
begin
|
||||||
|
o := f();
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
p0(()->
|
||||||
|
begin
|
||||||
|
Result := default(integer?);
|
||||||
|
//Ошибка: Нельзя преобразовать тип integer к Nullable<integer>
|
||||||
|
Result := 5;
|
||||||
|
end);
|
||||||
|
assert(System.Nullable&<integer>(o) = System.Nullable&<integer>(5));
|
||||||
|
end.
|
||||||
|
|
@ -37,8 +37,14 @@ namespace TreeConverter.LambdaExpressions
|
||||||
if (convertion_data_and_alghoritms.eq_type_nodes(mostCommonType, resultExpressionsTypes[i].Item1))
|
if (convertion_data_and_alghoritms.eq_type_nodes(mostCommonType, resultExpressionsTypes[i].Item1))
|
||||||
continue;
|
continue;
|
||||||
var typeComparisonResult = type_table.compare_types(resultExpressionsTypes[i].Item1, mostCommonType);
|
var typeComparisonResult = type_table.compare_types(resultExpressionsTypes[i].Item1, mostCommonType);
|
||||||
|
|
||||||
if (typeComparisonResult == type_compare.non_comparable_type)
|
if (typeComparisonResult == type_compare.non_comparable_type)
|
||||||
syntaxTreeVisitor.AddError(new CanNotConvertTypes(resultExpressionsTypes[i].Item3, resultExpressionsTypes[i].Item1, mostCommonType, syntaxTreeVisitor.get_location(resultExpressionsTypes[i].Item2)));
|
{
|
||||||
|
var ptc = type_table.get_convertions(resultExpressionsTypes[i].Item1, mostCommonType);
|
||||||
|
if (ptc.first == null)
|
||||||
|
syntaxTreeVisitor.AddError(new CanNotConvertTypes(resultExpressionsTypes[i].Item3, resultExpressionsTypes[i].Item1, mostCommonType, syntaxTreeVisitor.get_location(resultExpressionsTypes[i].Item2)));
|
||||||
|
}
|
||||||
|
|
||||||
if (typeComparisonResult == type_compare.greater_type)
|
if (typeComparisonResult == type_compare.greater_type)
|
||||||
mostCommonType = resultExpressionsTypes[i].Item1;
|
mostCommonType = resultExpressionsTypes[i].Item1;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue