From d5c153337711521bf418a7357fc46e89ee6557e2 Mon Sep 17 00:00:00 2001 From: Sven/Sarah Barth Date: Fri, 30 Jun 2023 16:30:46 +0200 Subject: [PATCH] * fix #40331: for enumeration with holes (that don't have type information) use the binary comparers + added test --- packages/rtl-generics/src/generics.defaults.pas | 3 ++- tests/webtbs/tw40331.pp | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 tests/webtbs/tw40331.pp diff --git a/packages/rtl-generics/src/generics.defaults.pas b/packages/rtl-generics/src/generics.defaults.pas index b6e97240aa..da2c9e056c 100644 --- a/packages/rtl-generics/src/generics.defaults.pas +++ b/packages/rtl-generics/src/generics.defaults.pas @@ -2180,7 +2180,8 @@ end; class function TComparerService.TypeNeedsBinaryMethods: Boolean; begin - Result := GetTypeKind(T) in TComparerService.UseBinaryMethods; + Result := (GetTypeKind(T) in TComparerService.UseBinaryMethods) or + ((GetTypeKind(T) = tkEnumeration) and not Assigned(TypeInfo(T))); end; class function TComparerService.LookupComparer(ATypeInfo: PTypeInfo; ASize: SizeInt): Pointer; diff --git a/tests/webtbs/tw40331.pp b/tests/webtbs/tw40331.pp new file mode 100644 index 0000000000..f424759fa8 --- /dev/null +++ b/tests/webtbs/tw40331.pp @@ -0,0 +1,13 @@ +program tw40331; +{$mode delphi} +uses Generics.Defaults; +type + SomeEnum = (zero = 0, two = 2); +var + z: IEqualityComparer; +begin + z:= TEqualityComparer.Default; + WriteLn('Done'); + //ReadLn; +end. +