From 3aebcccdf29cbe199a204f573fc1390e3760f678 Mon Sep 17 00:00:00 2001
From: Sven/Sarah Barth <pascaldragon@gmail.com>
Date: Wed, 7 Apr 2021 21:25:13 +0200
Subject: [PATCH] * allow procvars to not be registered right away

---
 compiler/i8086/symcpu.pas |  6 +++---
 compiler/pdecsub.pas      |  2 +-
 compiler/pdecvar.pas      |  2 +-
 compiler/ptype.pas        |  2 +-
 compiler/symdef.pas       | 10 +++++-----
 5 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/compiler/i8086/symcpu.pas b/compiler/i8086/symcpu.pas
index c7d9ae05bd..e613970c18 100644
--- a/compiler/i8086/symcpu.pas
+++ b/compiler/i8086/symcpu.pas
@@ -109,7 +109,7 @@ type
   { tcpuprocvardef }
 
   tcpuprocvardef = class(ti86procvardef)
-    constructor create(level:byte);override;
+    constructor create(level:byte;doregister:boolean);override;
     function getcopyas(newtyp:tdeftyp;copytyp:tproccopytyp;const paraprefix:string):tstoreddef;override;
     function address_type:tdef;override;
     function ofs_address_type:tdef;override;
@@ -440,9 +440,9 @@ implementation
                              tcpuprocvardef
 ****************************************************************************}
 
-  constructor tcpuprocvardef.create(level: byte);
+  constructor tcpuprocvardef.create(level: byte;doregister:boolean);
     begin
-      inherited create(level);
+      inherited create(level,doregister);
       if current_settings.x86memorymodel in x86_far_code_models then
         procoptions:=procoptions+[po_far];
     end;
diff --git a/compiler/pdecsub.pas b/compiler/pdecsub.pas
index 00b090284f..b9a4f658ad 100644
--- a/compiler/pdecsub.pas
+++ b/compiler/pdecsub.pas
@@ -336,7 +336,7 @@ implementation
           if parseprocvar<>pv_none then
            begin
              { inline procvar definitions are always nested procvars }
-             pv:=cprocvardef.create(normal_function_level+1);
+             pv:=cprocvardef.create(normal_function_level+1,true);
              if token=_LKLAMMER then
                parse_parameter_dec(pv);
              if parseprocvar=pv_func then
diff --git a/compiler/pdecvar.pas b/compiler/pdecvar.pas
index 633ef1a78e..a48a37dd42 100644
--- a/compiler/pdecvar.pas
+++ b/compiler/pdecvar.pas
@@ -647,7 +647,7 @@ implementation
                             procsym :
                               begin
                                  { Create a temporary procvardef to handle parameters }
-                                 storedprocdef:=cprocvardef.create(normal_function_level);
+                                 storedprocdef:=cprocvardef.create(normal_function_level,true);
                                  include(storedprocdef.procoptions,po_methodpointer);
                                  { Return type must be boolean }
                                  storedprocdef.returndef:=pasbool1type;
diff --git a/compiler/ptype.pas b/compiler/ptype.pas
index 59d38a9b3c..ae65cefa94 100644
--- a/compiler/ptype.pas
+++ b/compiler/ptype.pas
@@ -1580,7 +1580,7 @@ implementation
 
             is_func:=(token=_FUNCTION);
             consume(token);
-            pd:=cprocvardef.create(normal_function_level);
+            pd:=cprocvardef.create(normal_function_level,true);
 
             { usage of specialized type inside its generic template }
             if assigned(genericdef) then
diff --git a/compiler/symdef.pas b/compiler/symdef.pas
index 0ad0cd9df0..3ef8e245c9 100644
--- a/compiler/symdef.pas
+++ b/compiler/symdef.pas
@@ -729,7 +729,7 @@ interface
        end;
 
        tprocvardef = class(tabstractprocdef)
-          constructor create(level:byte);virtual;
+          constructor create(level:byte;doregister:boolean);virtual;
           { returns a procvardef that represents the address of a proc(var)def }
           class function getreusableprocaddr(def: tabstractprocdef; copytyp: tcacheableproccopytyp): tprocvardef; virtual;
           { same as above, but in case the def must never be freed after the
@@ -5787,7 +5787,7 @@ implementation
           end
         else
           begin
-            result:=cprocvardef.create(nestinglevel);
+            result:=cprocvardef.create(nestinglevel,true);
           end;
         tabstractprocdef(result).returndef:=returndef;
         tabstractprocdef(result).returndefderef:=returndefderef;
@@ -7243,9 +7243,9 @@ implementation
                                  TPROCVARDEF
 ***************************************************************************}
 
-    constructor tprocvardef.create(level:byte);
+    constructor tprocvardef.create(level:byte;doregister:boolean);
       begin
-         inherited create(procvardef,level,true);
+         inherited create(procvardef,level,doregister);
       end;
 
 
@@ -7307,7 +7307,7 @@ implementation
         i : tcallercallee;
         j : longint;
       begin
-        result:=cprocvardef.create(parast.symtablelevel);
+        result:=cprocvardef.create(parast.symtablelevel,true);
         tprocvardef(result).returndef:=returndef;
         tprocvardef(result).returndefderef:=returndefderef;
         tprocvardef(result).parast:=parast.getcopy;