Browse Source

* fix #40331: for enumeration with holes (that don't have type information) use the binary comparers
+ added test

Sven/Sarah Barth 2 years ago
parent
commit
d5c1533377
2 changed files with 15 additions and 1 deletions
  1. 2 1
      packages/rtl-generics/src/generics.defaults.pas
  2. 13 0
      tests/webtbs/tw40331.pp

+ 2 - 1
packages/rtl-generics/src/generics.defaults.pas

@@ -2180,7 +2180,8 @@ end;
 
 class function TComparerService.TypeNeedsBinaryMethods<T>: 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;

+ 13 - 0
tests/webtbs/tw40331.pp

@@ -0,0 +1,13 @@
+program tw40331;
+{$mode delphi}
+uses Generics.Defaults;
+type
+  SomeEnum = (zero = 0, two = 2);
+var
+  z: IEqualityComparer<SomeEnum>;
+begin
+  z:= TEqualityComparer<SomeEnum>.Default;
+  WriteLn('Done');
+  //ReadLn;
+end.
+