Browse Source

+ add utility function to retrieve a signed integer def for a given integer def

Sven/Sarah Barth 2 years ago
parent
commit
b0675058f5
2 changed files with 21 additions and 2 deletions
  1. 16 0
      compiler/defutil.pas
  2. 5 2
      compiler/ncal.pas

+ 16 - 0
compiler/defutil.pas

@@ -113,6 +113,10 @@ interface
        an ordinal or enum }
     function get_unsigned_inttype(def: tdef): torddef;
 
+    {# Returns a signed integer type of the same size as def; def must be
+       an ordinal or enum }
+    function get_signed_inttype(def: tdef): torddef;
+
     {# Returns whether def_from's range is comprised in def_to's if both are
       orddefs, false otherwise                                              }
     function is_in_limit(def_from,def_to : tdef) : boolean;
@@ -772,6 +776,18 @@ implementation
       end;
 
 
+    function get_signed_inttype(def: tdef): torddef;
+      begin
+        case def.typ of
+          orddef,
+          enumdef:
+            result:=cgsize_orddef(tcgsize2signed[def_cgsize(def)]);
+          else
+            internalerror(2022093007);
+        end;
+      end;
+
+
     function is_in_limit(def_from,def_to : tdef) : boolean;
 
       begin

+ 5 - 2
compiler/ncal.pas

@@ -307,7 +307,8 @@ interface
          dct_propput
        );
 
-    procedure reverseparameters(var p: tcallparanode);
+    { also returns the number of parameters }
+    function reverseparameters(var p: tcallparanode) : sizeint;
     function translate_disp_call(selfnode,parametersnode: tnode; calltype: tdispcalltype; const methodname : ansistring;
       dispid : longint;resultdef : tdef) : tnode;
 
@@ -348,11 +349,12 @@ implementation
                              HELPERS
  ****************************************************************************}
 
-    procedure reverseparameters(var p: tcallparanode);
+    function reverseparameters(var p: tcallparanode) : sizeint;
       var
         tmpp,
         hp1, hp2: tcallparanode;
       begin
+        result:=0;
         hp1:=nil;
         tmpp:=p;
         while assigned(tmpp) do
@@ -363,6 +365,7 @@ implementation
              { pull in }
              hp2.right:=hp1;
              hp1:=hp2;
+             inc(result);
           end;
         p:=hp1;
       end;