summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsvenbarth <svenbarth@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-06-13 21:08:38 +0000
committersvenbarth <svenbarth@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-06-13 21:08:38 +0000
commit7f0efac84af534fdae92548a02931706c20daec9 (patch)
tree920ff083b1e35c0bfa6bcb63d487a5b847e302e5
parentd0680f29e112864b4583ef34bec2a3a0e349ea65 (diff)
downloadfpc-7f0efac84af534fdae92548a02931706c20daec9.tar.gz
* fix for Mantis #35693: IsOrdinal also needs to return true for enums (with that AsOrdinal will work correctly as well)
* extended RTTI test by a test for enums git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@42219 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--packages/rtl-objpas/src/inc/rtti.pp2
-rw-r--r--packages/rtl-objpas/tests/tests.rtti.pas20
2 files changed, 21 insertions, 1 deletions
diff --git a/packages/rtl-objpas/src/inc/rtti.pp b/packages/rtl-objpas/src/inc/rtti.pp
index 3ed2410a86..3ac3084105 100644
--- a/packages/rtl-objpas/src/inc/rtti.pp
+++ b/packages/rtl-objpas/src/inc/rtti.pp
@@ -1548,7 +1548,7 @@ end;
function TValue.IsOrdinal: boolean;
begin
- result := (Kind in [tkInteger, tkInt64, tkQWord, tkBool]) or
+ result := (Kind in [tkInteger, tkInt64, tkQWord, tkBool, tkEnumeration]) or
((Kind in [tkClass, tkClassRef, tkInterfaceRaw, tkUnknown]) and not Assigned(FData.FAsPointer));
end;
diff --git a/packages/rtl-objpas/tests/tests.rtti.pas b/packages/rtl-objpas/tests/tests.rtti.pas
index 1a32e412f1..5c67f90073 100644
--- a/packages/rtl-objpas/tests/tests.rtti.pas
+++ b/packages/rtl-objpas/tests/tests.rtti.pas
@@ -60,6 +60,7 @@ type
procedure TestMakeExtended;
procedure TestMakeCurrency;
procedure TestMakeComp;
+ procedure TestMakeEnum;
procedure TestDataSize;
procedure TestDataSizeEmpty;
@@ -665,6 +666,25 @@ begin
CheckFalse(hadexcept, 'Had unsigned type conversion exception');
end;
+procedure TTestCase1.TestMakeEnum;
+var
+ e: TTestEnum;
+ v: TValue;
+begin
+ e := te1;
+
+ TValue.Make(@e, TypeInfo(e), v);
+ Check(not v.IsClass);
+ Check(not v.IsArray);
+ Check(not v.IsEmpty);
+ Check(not v.IsOpenArray);
+ Check(not v.IsObject);
+ Check(v.IsOrdinal);
+
+ Check(v.GetReferenceToRawData <> @e);
+ Check(TTestEnum(v.AsOrdinal) = te1);
+end;
+
procedure TTestCase1.TestGetIsReadable;
var
c: TRttiContext;