diff --git a/compiler/symdef.pas b/compiler/symdef.pas index 4ea6246c6e..43c73e2879 100644 --- a/compiler/symdef.pas +++ b/compiler/symdef.pas @@ -701,6 +701,7 @@ interface procstarttai, procendtai : tai; skpara: pointer; + personality: tprocdef; forwarddef, interfacedef : boolean; hasforward : boolean; @@ -734,6 +735,8 @@ interface procedure Setprocendtai(AValue: tai); function Getskpara: pointer; procedure Setskpara(AValue: pointer); + function Getpersonality: tprocdef; + procedure Setpersonality(AValue: tprocdef); function Getforwarddef: boolean; procedure Setforwarddef(AValue: boolean); function Getinterfacedef: boolean; @@ -846,6 +849,8 @@ interface property procendtai: tai read Getprocendtai write Setprocendtai; { optional parameter for the synthetic routine generation logic } property skpara: pointer read Getskpara write Setskpara; + { ABI-conformant exception handling personality function } + property personality: tprocdef read Getpersonality write Setpersonality; { true, if the procedure is only declared (forward procedure) } property forwarddef: boolean read Getforwarddef write Setforwarddef; @@ -5331,6 +5336,22 @@ implementation end; + function tprocdef.Getpersonality: tprocdef; + begin + if not assigned(implprocdefinfo) then + internalerror(2016121701); + result:=implprocdefinfo^.personality; + end; + + + procedure tprocdef.Setpersonality(AValue: tprocdef); + begin + if not assigned(implprocdefinfo) then + internalerror(2016121702); + implprocdefinfo^.personality:=AValue; + end; + + function tprocdef.Getforwarddef: boolean; begin if not assigned(implprocdefinfo) then