diff options
-rw-r--r-- | packages/rtl-objpas/src/inc/rtti.pp | 5 | ||||
-rw-r--r-- | packages/rtl-objpas/tests/tests.rtti.pas | 40 |
2 files changed, 44 insertions, 1 deletions
diff --git a/packages/rtl-objpas/src/inc/rtti.pp b/packages/rtl-objpas/src/inc/rtti.pp index 3ac3084105..f0b72d0ec9 100644 --- a/packages/rtl-objpas/src/inc/rtti.pp +++ b/packages/rtl-objpas/src/inc/rtti.pp @@ -1371,6 +1371,9 @@ begin raise Exception.CreateFmt(SErrUnableToGetValueForType,[ATypeInfo^.Name]); end; end; + tkChar, + tkWChar, + tkUChar, tkEnumeration, tkInteger : begin case GetTypeData(ATypeInfo)^.OrdType of @@ -1548,7 +1551,7 @@ end; function TValue.IsOrdinal: boolean; begin - result := (Kind in [tkInteger, tkInt64, tkQWord, tkBool, tkEnumeration]) or + result := (Kind in [tkInteger, tkInt64, tkQWord, tkBool, tkEnumeration, tkChar, tkWChar, tkUChar]) 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 5c67f90073..b95c26a8ff 100644 --- a/packages/rtl-objpas/tests/tests.rtti.pas +++ b/packages/rtl-objpas/tests/tests.rtti.pas @@ -61,6 +61,8 @@ type procedure TestMakeCurrency; procedure TestMakeComp; procedure TestMakeEnum; + procedure TestMakeAnsiChar; + procedure TestMakeWideChar; procedure TestDataSize; procedure TestDataSizeEmpty; @@ -685,6 +687,44 @@ begin Check(TTestEnum(v.AsOrdinal) = te1); end; +procedure TTestCase1.TestMakeAnsiChar; +var + c: AnsiChar; + v: TValue; +begin + c := #20; + + TValue.Make(@c, TypeInfo(c), 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 <> @c); + Check(AnsiChar(v.AsOrdinal) = #20); +end; + +procedure TTestCase1.TestMakeWideChar; +var + c: WideChar; + v: TValue; +begin + c := #$1234; + + TValue.Make(@c, TypeInfo(c), 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 <> @c); + Check(WideChar(v.AsOrdinal) = #$1234); +end; + procedure TTestCase1.TestGetIsReadable; var c: TRttiContext; |