From 9a3bbdd7f2a1f6b8230092964caedc8d71bc2d36 Mon Sep 17 00:00:00 2001
From: florian <florian@freepascal.org>
Date: Tue, 25 Aug 1998 22:30:00 +0000
Subject: [PATCH]   + initial revision:      o constants      o basic type data
 record

---
 rtl/objpas/typinfo.pp | 121 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 121 insertions(+)
 create mode 100644 rtl/objpas/typinfo.pp

diff --git a/rtl/objpas/typinfo.pp b/rtl/objpas/typinfo.pp
new file mode 100644
index 0000000000..f7aeff5fe8
--- /dev/null
+++ b/rtl/objpas/typinfo.pp
@@ -0,0 +1,121 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+
+    Copyright (c) 1998 by Florian Klaempfl
+    member of the Free Pascal development team
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+
+{ This unit provides the same functionality as the TypInfo Unit }
+{ of Delphi                                                     }
+
+unit typinfo;
+
+  interface
+
+    uses
+       sysutils;
+
+    type
+      // FPC uses a Byte because a enumeration type takes always
+      // 4 bytes which is too much 
+      TTypeKind = Byte;
+      TOrdType = Byte;
+      TMethodKind = Byte;
+      TFloatType = Byte;
+      TParamFlags;
+
+      TTypeKinds = set of TTypeKind;
+
+      TTypeInfo = record
+         Kind : TTypeKind;
+         Name : ShortString;
+      end;
+      PTypeInfo = ^TTypeInfo;
+      PPTypeInfo = ^PTypeInfo;
+
+      PTypeData = ^TTypeData;
+      TTypeData = packed record
+         case TTypeKind of
+            tkUnKnown,tkLString,tkWString,tkAString,tkVariant:
+              ();
+            tkInteger,tkChar,tkEnumeration,tkWChar:
+              ( //!!!!! To be added );
+            tkFloat:
+              (FloatType : TFloatType);
+            tkSString:
+              (MaxLength : Byte);
+            tkClass:
+              (ClassType : TClass);
+              (ParentInfo : PPTypeInfo);
+              (PropCount : SmallInt);
+              (UnitName : ShortString);
+      end;
+
+   const
+      // if you change one of the following constants,
+      // you have also to change the compiler in an appropriate way !
+      tkUnknown       = 0;
+      tkInteger       = 1;
+      tkChar          = 2;
+      tkEnumeration   = 3;
+      tkFloat         = 4;
+      tkSet           = 6;
+      tkMethod        = 7;
+      tkSString       = 8;
+      tkString        = tkSString;
+      tkLString       = 9;
+      tkAString       = 10;
+      tkWString       = 11;
+      tkVariant       = 12;
+      tkArray         = 13;
+      tkRecord        = 14;
+      tkInterface     = 15;
+      tkClass         = 16;
+      tkObject        = 17;
+      tkWChar         = 18;
+
+      otSByte         = 0;
+      otUByte         = 1;
+      otSWord         = 2;
+      otUWord         = 3;
+      otSLong         = 4;
+      otULong         = 5;
+
+      ftSingle        = 0;
+      ftDouble        = 1;
+      ftExtended      = 2;
+      ftComp          = 3;
+      ftCurr          = 4;
+      ftFixed16       = 5;
+      ftFixed32       = 6;
+
+    // just skips the id and the name
+    function GetTypeData(TypeInfo : PTypeInfo) : PTypeData;
+
+  implementation
+
+    function GetTypeData(TypeInfo : PTypeInfo) : PTypeData;
+
+      begin
+         GetTypeData:=PTypeData(TypeInfo)+2+PByte(TypeInfo+1)^;
+      end;
+
+end.
+
+{
+  $Log$
+  Revision 1.1  1998-08-25 22:30:00  florian
+    + initial revision:
+       o constants
+       o basic type data record
+
+}