This commit is contained in:
Ivan Bondarev 2022-10-16 12:24:51 +02:00
parent c86877149e
commit 6eb2b98fa5
3 changed files with 40 additions and 1 deletions

View 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
View 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.

View file

@ -37,8 +37,14 @@ namespace TreeConverter.LambdaExpressions
if (convertion_data_and_alghoritms.eq_type_nodes(mostCommonType, resultExpressionsTypes[i].Item1))
continue;
var typeComparisonResult = type_table.compare_types(resultExpressionsTypes[i].Item1, mostCommonType);
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)
mostCommonType = resultExpressionsTypes[i].Item1;
}