fix #1645
This commit is contained in:
Ivan Bondarev 2021-01-10 18:21:39 +01:00
parent 4893429c2b
commit 16274ab958
5 changed files with 27 additions and 1 deletions

View file

@ -0,0 +1,4 @@
begin
var s: sequence of byte;
var e: IEnumerator<char> := s.OrderBy(b->b).GetEnumerator;
end.

9
TestSuite/generics45.pas Normal file
View file

@ -0,0 +1,9 @@
begin
var s: sequence of integer := Arr(3,2,1).AsEnumerable();
var e: IEnumerator<integer> := s.OrderBy(b->b).GetEnumerator;
e.MoveNext();
assert(e.Current = 1);
var e2: IEnumerator<integer> := s.OrderBy(b->b).GetEnumerator();
e2.MoveNext();
assert(e2.Current = 1);
end.

6
TestSuite/generics46.pas Normal file
View file

@ -0,0 +1,6 @@
begin
var o: ICollection<integer> := Arr(1,2,3);
var enm: IEnumerator<integer> := o.GetEnumerator;
enm.MoveNext();
assert(enm.Current = 1);
end.

View file

@ -663,7 +663,7 @@ namespace PascalABCCompiler.TreeConverter
en.location = loc;
if (en.type is delegated_methods dm && dm.proper_methods[0].parameters.Count == 0 && dm.proper_methods[0].ret_type != null)
{
if (to != SystemLibrary.SystemLibrary.object_type)
if (to != SystemLibrary.SystemLibrary.object_type && to.IsDelegate)
AddError(new CanNotConvertTypes(en, dm.proper_methods[0].ret_type, to, loc)); // SSM 18/06/20 #2261
else
return en;

View file

@ -16570,6 +16570,13 @@ namespace PascalABCCompiler.TreeConverter
_var_def_statement.inital_value = get_possible_array_const(_var_def_statement.inital_value,tn);
var ivc = convert_strong(_var_def_statement.inital_value);
inital_value = convert_strong_to_constant_or_function_call_for_varinit(ivc, tn);
if (!tn.IsDelegate && tn != SystemLibrary.SystemLibrary.object_type && inital_value is typed_expression && _var_def_statement.inital_value is addressed_value)
{
method_call mc = new method_call();
mc.dereferencing_value = _var_def_statement.inital_value as addressed_value;
ivc = convert_strong(mc);
inital_value = convert_strong_to_constant_or_function_call_for_varinit(ivc, tn);
}
}
}
else