From bfc3291d81bebe55918b4ad807326286ffb35cea Mon Sep 17 00:00:00 2001 From: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Wed, 1 Oct 2025 11:48:04 +0300 Subject: [PATCH] improving type recovery (#3341) --- TestSuite/foreach_resolver1.pas | 12 +++- TestSuite/foreach_resolver_lib.dll | Bin 65024 -> 96768 bytes TestSuite/foreach_resolver_lib.pas | 18 +++++- .../TreeConversion/syntax_tree_visitor.cs | 52 ++++++++++++------ 4 files changed, 63 insertions(+), 19 deletions(-) diff --git a/TestSuite/foreach_resolver1.pas b/TestSuite/foreach_resolver1.pas index c61937fea..3c56ac31e 100644 --- a/TestSuite/foreach_resolver1.pas +++ b/TestSuite/foreach_resolver1.pas @@ -1,5 +1,7 @@ {$reference 'foreach_resolver_lib.dll'} +uses System; + type c0 = class procedure pr:= exit; @@ -26,7 +28,7 @@ begin var v3:= new c3; v3._element:= 'myStr'; foreach var item in v3 do - print(item); + item.GetHashCode; Assert(check); check:= false; @@ -45,4 +47,12 @@ begin Assert(item = 4); Assert(check); + check:= false; + + var v6:= new c6>; + v6._element:= new List, integer>, Dictionary, Dictionary>, integer>>; + foreach var item in v6 do + item.FirstOrDefault; + + Assert(check); end. \ No newline at end of file diff --git a/TestSuite/foreach_resolver_lib.dll b/TestSuite/foreach_resolver_lib.dll index e56056d112cd2bdebaa3c3b273d33a36b5e11458..65df20be750f4e0b888956bf2c8460db03c28952 100644 GIT binary patch literal 96768 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%0ABT=lns=AL9I0uJuFC@8J9{hPSfiyux0# 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 Gf&T}s0{=?@ literal 65024 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 VAj8u~%Nv(|k7)V>Dc_j`{{vkJ4VnM| diff --git a/TestSuite/foreach_resolver_lib.pas b/TestSuite/foreach_resolver_lib.pas index 3f629a79e..1aa5a24cb 100644 --- a/TestSuite/foreach_resolver_lib.pas +++ b/TestSuite/foreach_resolver_lib.pas @@ -1,5 +1,5 @@ library foreach_resolver_lib; - uses System.Collections, System.Collections.Generic; + uses System, System.Collections, System.Collections.Generic; var check:= false; @@ -55,4 +55,20 @@ c4 = class (c2) end; c5 = class (c1) end; + + c6 = class (IEnumerable, Dictionary, integer>>>) + public + _element: IEnumerable, Dictionary, integer>>; + + function GetEnumerator: IEnumerator, Dictionary, integer>>>; + begin + check:= true; + var l:= new List, Dictionary, integer>>>; + l.Add(_element); + result:= l.GetEnumerator; + end; + + function IEnumerable.GetEnumerator: IEnumerator; + begin end; + end; end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index e0c47de5e..0227063ea 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -19040,6 +19040,32 @@ namespace PascalABCCompiler.TreeConverter } } + private type_node RestoreTypesInGeneric(Type orig, IList genericArgs) + { + if (!orig.IsGenericType) + throw new InvalidOperationException(); + + var actualTypes = new List(); + + foreach (var declaredType in orig.GetGenericArguments()) + { + type_node actualType; + + if (declaredType.IsGenericParameter) + actualType = genericArgs[declaredType.GenericParameterPosition]; + else if (declaredType.IsGenericType) + actualType = RestoreTypesInGeneric(declaredType, genericArgs); + else + actualType = compiled_type_node.get_type_node(declaredType); + + actualTypes.Add(actualType); + } + + var result = compiled_type_node.get_type_node( orig.GetGenericTypeDefinition() ); + + return result.get_instance(actualTypes); + } + public bool FindIEnumerableElementType(type_node tn, ref type_node elem_type, out bool sys_coll_ienum) { sys_coll_ienum = false; @@ -19101,32 +19127,24 @@ namespace PascalABCCompiler.TreeConverter else { // для "tn is compiled_generic_instance_type_node" необходимо восстановить стёртые типы - // orig.instance_params содержит имена типоаргументов при объявлении - // tn.instance_params содержит фактические типоаргументы - // остаётся найти нужный индекс в orig и взять аргумент из tn + // tn.instance_params содержит фактические типоаргументы (их может быть несколько) + // чтобы взять нужный, проверяем позицию через .GenericParameterPosition if (foundElementType.IsGenericParameter) { - var ind = orig.instance_params.FindIndex(item => item.name == foundElementType.Name); + var ind = foundElementType.GenericParameterPosition; elem_type = tn.instance_params[ind]; } else { // значит элемент последовательности сам является generic типом - // нужно сопоставить все типоаргументы из orig типоаргументам из tn - // нельзя просто брать все, тк их количество может отличаться + // при чём его типоаргументы могут быть как из tn.instance_params, так и самостоятельными + // IEnumerable< IEnumerable > + // IEnumerable< Dictionary > + // + // а также глубоко вложенными IEnumerable< IEnumerable> > - var declaredTypes = foundElementType - .GetGenericArguments() - .Select(item=> item.Name) - .ToArray(); - - var actualTypes = tn.instance_params - .Where((item, i) => declaredTypes.Contains(orig.instance_params[i].name)) - .ToList(); - - elem_type = compiled_type_node.get_type_node( foundElementType.GetGenericTypeDefinition() ); - elem_type = elem_type.get_instance(actualTypes); + elem_type = RestoreTypesInGeneric(foundElementType, tn.instance_params); } }