Ver código fonte

* extend parse_proctype_directives to handle proc(var)defs as well as invokables

Sven/Sarah Barth 3 anos atrás
pai
commit
c92e290d67
1 arquivos alterados com 9 adições e 6 exclusões
  1. 9 6
      compiler/pdecsub.pas

+ 9 - 6
compiler/pdecsub.pas

@@ -68,7 +68,7 @@ interface
 
     procedure parse_parameter_dec(pd:tabstractprocdef);
     procedure parse_proc_directives(pd:tabstractprocdef;var pdflags:tpdflags);
-    procedure parse_proctype_directives(pd:tdef);
+    procedure parse_proctype_directives(pd_or_invkdef:tdef);
     procedure parse_object_proc_directives(pd:tprocdef);
     procedure parse_record_proc_directives(pd:tprocdef);
     function  parse_proc_head(astruct:tabstractrecorddef;potype:tproctypeoption;flags:tparse_proc_flags;genericdef:tdef;generictypelist:tfphashobjectlist;out pd:tprocdef):boolean;
@@ -3431,16 +3431,19 @@ const
       end;
 
 
-    procedure parse_proctype_directives(pd:tdef);
+    procedure parse_proctype_directives(pd_or_invkdef:tdef);
       var
         pdflags : tpdflags;
+        pd : tabstractprocdef;
       begin
-        if is_invokable(pd) then
-          pd:=get_invoke_procdef(tobjectdef(pd))
-        else if pd.typ<>procvardef then
+        if is_invokable(pd_or_invkdef) then
+          pd:=get_invoke_procdef(tobjectdef(pd_or_invkdef))
+        else if pd_or_invkdef.typ=procvardef then
+          pd:=tprocvardef(pd_or_invkdef)
+        else
           internalerror(2022012501);
         pdflags:=[pd_procvar];
-        parse_proc_directives(tabstractprocdef(pd),pdflags);
+        parse_proc_directives(pd,pdflags);
       end;