diff --git a/TestSuite/extensionmethods30.pas b/TestSuite/extensionmethods30.pas new file mode 100644 index 000000000..94b79d0d7 --- /dev/null +++ b/TestSuite/extensionmethods30.pas @@ -0,0 +1,12 @@ +begin + var d:=new Dictionary; + d.Add(1, 2); + var s:sequence of integer := d.Values + 5; + var s2: sequence of byte := d.Keys + byte(5); + var a := s.ToArray(); + assert(a[0] = 2); + assert(a[1] = 5); + var a2 := s2.ToArray(); + assert(a2[0] = 1); + assert(a2[1] = 5); +end. \ No newline at end of file diff --git a/TreeConverter/TreeRealization/types.cs b/TreeConverter/TreeRealization/types.cs index 9df531848..141743372 100644 --- a/TreeConverter/TreeRealization/types.cs +++ b/TreeConverter/TreeRealization/types.cs @@ -3309,7 +3309,7 @@ namespace PascalABCCompiler.TreeRealization sil = bas_type.scope.SymbolTable.Find(bas_type.scope, name); bas_type = bas_type.base_type as compiled_type_node; } - if (sil == null) + //if (sil == null || true) { for (int i = 0; i < ImplementingInterfaces.Count; i++) { @@ -3318,10 +3318,16 @@ namespace PascalABCCompiler.TreeRealization ctn = ctn.original_generic as compiled_type_node; if (ctn != null && ctn.scope != null) { - sil = ctn.scope.SymbolTable.Find(ctn.scope, name); + List sil3 = ctn.scope.SymbolTable.Find(ctn.scope, name); + if (sil3 != null) + { + if (sil != null) + sil.AddRange(sil3); + else + sil = sil3; + } } - if (sil != null) - break; + } }