2
0
Эх сурвалжийг харах

Copy x86_64-win64 specific code of tx64tryfinallynode.pass_generate_code over to taarch64tryfinallynode.pass_generate_code

Pierre Muller 2 долоо хоног өмнө
parent
commit
d1242ad4e7

+ 21 - 13
compiler/aarch64/ncpuflw.pas

@@ -59,7 +59,8 @@ implementation
     cgbase,cgobj,cgutils,tgobj,
     cpubase,htypechk,
     pass_1,pass_2,
-    aasmbase,aasmtai,aasmdata,aasmcpu,procinfo,cpupi;
+    aasmbase,aasmtai,aasmdata,aasmcpu,
+    procinfo,cpupi,procdefutil;
 
   var
     endexceptlabel: tasmlabel;
@@ -349,24 +350,31 @@ procedure taarch64tryfinallynode.pass_generate_code;
 
 function taarch64tryfinallynode.dogetcopy: tnode;
   var
-    p : taarch64tryfinallynode absolute result;
+    n : taarch64tryfinallynode;
   begin
-    result:=inherited dogetcopy;
+    n:=taarch64tryfinallynode(inherited dogetcopy);
     if (target_info.system=system_aarch64_win64) then
       begin
-        if df_generic in current_procinfo.procdef.defoptions then
-          InternalError(2020033104);
-
-        p.finalizepi:=tcgprocinfo(current_procinfo.create_for_outlining('$fin$',current_procinfo.procdef.struct,potype_exceptfilter,voidtype,p.right));
-        if pi_do_call in finalizepi.flags then
-          include(p.finalizepi.flags,pi_do_call);
-        { the init/final code is messing with asm nodes, so inform the compiler about this }
-        include(p.finalizepi.flags,pi_has_assembler_block);
-        if implicitframe then
-          p.finalizepi.allocate_push_parasize(32);
+        n.finalizepi:=tcgprocinfo(cprocinfo.create(finalizepi.parent));
+        n.finalizepi.force_nested;
+        n.finalizepi.procdef:=create_outline_procdef('$fin$',current_procinfo.procdef.struct,potype_exceptfilter,voidtype);
+        n.finalizepi.entrypos:=finalizepi.entrypos;
+        n.finalizepi.entryswitches:=finalizepi.entryswitches;
+        n.finalizepi.exitpos:=finalizepi.exitpos;
+        n.finalizepi.exitswitches:=finalizepi.exitswitches;
+        n.finalizepi.flags:=finalizepi.flags;
+        { node already transformed? }
+        if assigned(finalizepi.code) then
+          begin
+            n.finalizepi.code:=finalizepi.code.getcopy;
+            n.right:=ccallnode.create(nil,tprocsym(n.finalizepi.procdef.procsym),nil,nil,[],nil);
+            firstpass(n.right);
+          end;
       end;
+    result:=n;
   end;
 
+
 { taarch64tryexceptnode }
 
 procedure taarch64tryexceptnode.pass_generate_code;