Forráskód Böngészése

+ new utility function get_typekind() to retrieve the TTypeKind value of a def

git-svn-id: trunk@36874 -
svenbarth 8 éve
szülő
commit
7e692fac2b
1 módosított fájl, 103 hozzáadás és 0 törlés
  1. 103 0
      compiler/defutil.pas

+ 103 - 0
compiler/defutil.pas

@@ -341,6 +341,9 @@ interface
     { returns true if def is a C "block" }
     function is_block(def: tdef): boolean;
 
+    { returns the TTypeKind value of the def }
+    function get_typekind(def: tdef): byte;
+
 implementation
 
     uses
@@ -1457,4 +1460,104 @@ implementation
         result:=(def.typ=procvardef) and (po_is_block in tprocvardef(def).procoptions)
       end;
 
+
+    function get_typekind(def:tdef):byte;
+      begin
+        case def.typ of
+          arraydef:
+            if ado_IsDynamicArray in tarraydef(def).arrayoptions then
+              result:=tkDynArray
+            else
+              result:=tkArray;
+          recorddef:
+            result:=tkRecord;
+          pointerdef:
+            result:=tkPointer;
+          orddef:
+            case torddef(def).ordtype of
+              u8bit,
+              u16bit,
+              u32bit,
+              s8bit,
+              s16bit,
+              s32bit:
+                result:=tkInteger;
+              u64bit:
+                result:=tkQWord;
+              s64bit:
+                result:=tkInt64;
+              pasbool8,
+              pasbool16,
+              pasbool32,
+              pasbool64,
+              bool8bit,
+              bool16bit,
+              bool32bit,
+              bool64bit:
+                result:=tkBool;
+              uchar:
+                result:=tkChar;
+              uwidechar:
+                result:=tkWChar;
+              scurrency:
+                result:=tkFloat;
+              else
+                result:=tkUnknown;
+            end;
+          stringdef:
+            case tstringdef(def).stringtype of
+              st_shortstring:
+                result:=tkSString;
+              st_longstring:
+                result:=tkLString;
+              st_ansistring:
+                result:=tkAString;
+              st_widestring:
+                result:=tkWString;
+              st_unicodestring:
+                result:=tkUString;
+              else
+                result:=tkUnknown;
+            end;
+          enumdef:
+            result:=tkEnumeration;
+          objectdef:
+            case tobjectdef(def).objecttype of
+              odt_class,
+              odt_javaclass:
+                result:=tkClass;
+              odt_object:
+                result:=tkObject;
+              odt_interfacecom,
+              odt_dispinterface,
+              odt_interfacejava:
+                result:=tkInterface;
+              odt_interfacecorba:
+                result:=tkInterfaceCorba;
+              odt_helper:
+                result:=tkHelper;
+              else
+                result:=tkUnknown;
+            end;
+          { currently tkFile is not used }
+          {filedef:
+            result:=tkFile;}
+          setdef:
+            result:=tkSet;
+          procvardef:
+            if tprocvardef(def).is_methodpointer then
+              result:=tkMethod
+            else
+              result:=tkProcVar;
+          floatdef:
+            result:=tkFloat;
+          classrefdef:
+            result:=tkClassRef;
+          variantdef:
+            result:=tkVariant;
+          else
+            result:=tkUnknown;
+        end;
+      end;
+
 end.