Browse Source

+ add utility function to retrieve the char type def from a stringlike def

Sven/Sarah Barth 2 years ago
parent
commit
ea417fbaaf
1 changed files with 19 additions and 0 deletions
  1. 19 0
      compiler/defutil.pas

+ 19 - 0
compiler/defutil.pas

@@ -49,6 +49,9 @@ interface
        namely that can be joined and compared with another string-like type }
     function is_stringlike(def : tdef) : boolean;
 
+    {# Returns the typedef for the char type that matches the stringlike }
+    function chartype_for_stringlike(def : tdef) : tdef;
+
     {# Returns True, if definition defines an enumeration type }
     function is_enum(def : tdef) : boolean;
 
@@ -575,6 +578,22 @@ implementation
                   (def=java_jlstring);
       end;
 
+    function chartype_for_stringlike(def : tdef) : tdef;
+      begin
+        if is_string(def) then
+          result:=tstringdef(def).get_default_char_type
+        else if is_anychar(def) then
+          result:=def
+        else if is_pchar(def) or is_chararray(def) or is_open_chararray(def) then
+          result:=cansichartype
+        else if is_pwidechar(def) or is_pwidechar(def) or is_open_widechararray(def) then
+          result:=cwidechartype
+        else if def=java_jlstring then
+          result:=cwidechartype
+        else
+          internalerror(2023012501);
+      end;
+
     function is_enum(def : tdef) : boolean;
       begin
         result:=def.typ=enumdef;