diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index 661227748..4314f3b02 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "8"; public const string Build = "3"; - public const string Revision = "3237"; + public const string Revision = "3239"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index 36aa30d9a..9a5ebd2b3 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ %MINOR%=8 -%REVISION%=3237 +%REVISION%=3239 %COREVERSION%=3 %MAJOR%=3 diff --git a/Release/pabcversion.txt b/Release/pabcversion.txt index 788f57a45..e20ab7a62 100644 --- a/Release/pabcversion.txt +++ b/Release/pabcversion.txt @@ -1 +1 @@ -3.8.3.3237 +3.8.3.3239 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index e0376ffa9..4084fa341 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.8.3.3237' +!define VERSION '3.8.3.3239' diff --git a/TestSuite/CompilationSamples/PABCSystem.pas b/TestSuite/CompilationSamples/PABCSystem.pas index de95e6359..b7ae2a3f0 100644 --- a/TestSuite/CompilationSamples/PABCSystem.pas +++ b/TestSuite/CompilationSamples/PABCSystem.pas @@ -1804,7 +1804,7 @@ function Min(a, b, c: integer): integer; function Min(a, b, c, d: integer): integer; ///-function Max(a,b,...: T): T; -/// Возвращает максиимальное из a,b,... +/// Возвращает максимальное из a,b,... function Max(params a: array of T): T; ///-- //function Max(params a: array of real): real; diff --git a/TestSuite/CompilationSamples/School.pas b/TestSuite/CompilationSamples/School.pas index a9abcecab..50c6d18b4 100644 --- a/TestSuite/CompilationSamples/School.pas +++ b/TestSuite/CompilationSamples/School.pas @@ -84,7 +84,7 @@ function Digits(n: int64; base: integer := 10): List; /// Возвращает целое десятичное число на основе его расширенного представления /// по основанию base (по умолчанию base=10). /// Функция выполняет действие, обратное функции Digits, -function Refold(ext: List; base: integer := 10): int64; +function DigitsToInt64(ext: List; base: integer := 10): int64; /// Возвращает список делителей натурального числа n function Divisors(n: integer): List; @@ -703,7 +703,7 @@ function Digits(Self: int64; base: integer := 10): List; /// Возвращает целое десятичное число на основе его расширенного представления /// по основанию base (по умолчанию base=10). /// Функция выполняет действие, обратное функции Digits -function Refold(ext: List; base: integer): int64; +function DigitsToInt64(ext: List; base: integer): int64; begin Result := 0; var p := int64(1); @@ -714,8 +714,8 @@ begin end end; -function ReFold(Self: List; base: integer := 10): int64; - extensionmethod := Refold(Self, base); +function DigitsToInt64(Self: List; base: integer := 10): int64; + extensionmethod := DigitsToInt64(Self, base); {$endregion} diff --git a/TreeConverter/TreeRealization/type_table.cs b/TreeConverter/TreeRealization/type_table.cs index 6c1c6c092..04d1c0c61 100644 --- a/TreeConverter/TreeRealization/type_table.cs +++ b/TreeConverter/TreeRealization/type_table.cs @@ -2,6 +2,7 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; using System.Collections; +using System.Collections.Generic; using System.Linq; @@ -568,55 +569,73 @@ namespace PascalABCCompiler.TreeRealization //implements = tnode.ImplementingInterfaces.Contains(base_class); implements = false; + // Цикл по всем реализуемым интерфейсам. А если tnode сам является интерфейсом? foreach (var interf in tnode.ImplementingInterfaces) { + var ctn = interf as compiled_type_node; + var bcctn = base_class as compiled_type_node; + var cgitn = interf as compiled_generic_instance_type_node; + var bcgitn = base_class as compiled_generic_instance_type_node; + // interf - IEnumerable, base_class - IEnumerable if (interf == base_class) { implements = true; break; } + // Справка: + // IEnumerable - compiled_type_node + // IEnumerable, List - compiled_generic_instance_type_node + // MyIEnumerable, MyIEnumerable - common_generic_instance_type_node + // Здесь common быть не может поскольку ковариантность у нас - только для откомпилированных NET-типов // Тут можно проверить на ковариантность // еще где то надо проверять, что IEnumerable -> IEnumerable, но здесь base_class предполагает, // что это - класс, и рассматривает все его интерфейсы, упуская ситуацию, когда base_class - это и есть интерфейс - else if (interf is compiled_generic_instance_type_node cgitn && base_class is compiled_generic_instance_type_node bcgitn) + else if (cgitn != null && bcgitn != null) { - if (cgitn.original_generic != null && cgitn.original_generic == bcgitn.original_generic) - { - var ctcgi = cgitn.original_generic as compiled_type_node; - if (ctcgi != null) - { - // теперь надо проверить параметры на ковариантность - все - var n = bcgitn.instance_params.Count; - var n1 = cgitn.instance_params.Count; + compiled_type_node interf_original_generic = cgitn.original_generic as compiled_type_node; + compiled_type_node base_original_generic = bcgitn.original_generic as compiled_type_node; + List interf_instance_params = cgitn.instance_params; + List base_instance_params = bcgitn.instance_params; - var impl = true; - if (n != n1) - impl = false; - else - for (int i=0; i + var impl = true; + if (n != n1) + impl = false; + else + for (int i=0; i @@ -59,11 +59,11 @@ function ReadKey: char; /// function KeyPressed: boolean; /// -/// Возвращает высоту экрана +/// Возвращает ширину экрана /// function WindowWidth: integer; /// -/// Возвращает ширину экрана +/// Возвращает высоту экрана /// /// function WindowHeight: integer; diff --git a/bin/Lib/PABCSystem.pas b/bin/Lib/PABCSystem.pas index de95e6359..b7ae2a3f0 100644 --- a/bin/Lib/PABCSystem.pas +++ b/bin/Lib/PABCSystem.pas @@ -1804,7 +1804,7 @@ function Min(a, b, c: integer): integer; function Min(a, b, c, d: integer): integer; ///-function Max(a,b,...: T): T; -/// Возвращает максиимальное из a,b,... +/// Возвращает максимальное из a,b,... function Max(params a: array of T): T; ///-- //function Max(params a: array of real): real; diff --git a/bin/Lib/School.pas b/bin/Lib/School.pas index a9abcecab..50c6d18b4 100644 --- a/bin/Lib/School.pas +++ b/bin/Lib/School.pas @@ -84,7 +84,7 @@ function Digits(n: int64; base: integer := 10): List; /// Возвращает целое десятичное число на основе его расширенного представления /// по основанию base (по умолчанию base=10). /// Функция выполняет действие, обратное функции Digits, -function Refold(ext: List; base: integer := 10): int64; +function DigitsToInt64(ext: List; base: integer := 10): int64; /// Возвращает список делителей натурального числа n function Divisors(n: integer): List; @@ -703,7 +703,7 @@ function Digits(Self: int64; base: integer := 10): List; /// Возвращает целое десятичное число на основе его расширенного представления /// по основанию base (по умолчанию base=10). /// Функция выполняет действие, обратное функции Digits -function Refold(ext: List; base: integer): int64; +function DigitsToInt64(ext: List; base: integer): int64; begin Result := 0; var p := int64(1); @@ -714,8 +714,8 @@ begin end end; -function ReFold(Self: List; base: integer := 10): int64; - extensionmethod := Refold(Self, base); +function DigitsToInt64(Self: List; base: integer := 10): int64; + extensionmethod := DigitsToInt64(Self, base); {$endregion}