Browse Source

* Add operators to TMethod, for Delphi compatibility

Michaël Van Canneyt 1 year ago
parent
commit
30a20cc209
2 changed files with 42 additions and 0 deletions
  1. 35 0
      rtl/inc/objpas.inc
  2. 7 0
      rtl/inc/objpash.inc

+ 35 - 0
rtl/inc/objpas.inc

@@ -1396,6 +1396,40 @@ end;
                              Various Delphi constructs
 ****************************************************************************}
 
+class operator TMethod.=(const aLeft, aRight: TMethod): Boolean; inline;
+begin
+  Result:=(aLeft.Data=aRight.Data) and (aLeft.Code=aRight.Code);
+end;
+
+class operator TMethod.<>(const aLeft, aRight: TMethod): Boolean; inline;
+begin
+  Result:=(aLeft.Data<>aRight.Data) or (aLeft.Code<>aRight.Code);
+end;
+
+class operator TMethod.>(const aLeft, aRight: TMethod): Boolean; inline;
+begin
+  Result:=(PtrUInt(aLeft.Data)>PtrUInt(aRight.Data)) 
+            or
+          ((aLeft.Data=aRight.Data) and (PtrUInt(aLeft.Code)>PtrUint(aRight.Code)));
+end;
+
+class operator TMethod.>=(const aLeft, aRight: TMethod): Boolean; inline;
+begin
+  Result:=(aLeft>aRight) or (aLeft=aRight);
+end;
+
+class operator TMethod.<(const aLeft, aRight: TMethod): Boolean; inline;
+begin
+  Result:=(PtrUInt(aLeft.Data)<PtrUInt(aRight.Data)) 
+            or
+          ((aLeft.Data=aRight.Data) and (PtrUInt(aLeft.Code)<PtrUint(aRight.Code)));
+end;
+
+class operator TMethod.<=(const aLeft, aRight: TMethod): Boolean; inline;
+begin
+  Result:=(aLeft<aRight) or (aLeft=aRight);
+end;
+
 
 function TPtrWrapper.ToPointer: Pointer;
 begin
@@ -1863,3 +1897,4 @@ begin
 end;
 
 {$ENDIF}
+

+ 7 - 0
rtl/inc/objpash.inc

@@ -210,6 +210,13 @@
        TMethod = record
          Code : CodePointer;
          Data : Pointer;
+       public
+         class operator =(const aLeft, aRight: TMethod): Boolean; inline;
+         class operator <>(const aLeft, aRight: TMethod): Boolean; inline;
+         class operator >(const aLeft, aRight: TMethod): Boolean; inline;
+         class operator >=(const aLeft, aRight: TMethod): Boolean; inline;
+         class operator <(const aLeft, aRight: TMethod): Boolean; inline;
+         class operator <=(const aLeft, aRight: TMethod): Boolean; inline;
        end;
 
        // "Maximum" available stringtype : Shortstring, AnsiString or WideString