mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-20 11:29:27 +02:00
objc: use compile-time macOS version checks
Use "modern" APIs for calling inherited messages when targeting Mac OS X 10.6 or later
This commit is contained in:
parent
b26703feaa
commit
df3a0af7e0
@ -2764,10 +2764,10 @@ implementation
|
||||
begin
|
||||
if not(cnf_inherited in callnodeflags) then
|
||||
msgsendname:='OBJC_MSGSEND_STRET'
|
||||
{$if defined(onlymacosx10_6) or defined(arm) }
|
||||
else if (target_info.system in systems_objc_nfabi) then
|
||||
else if (target_info.system in systems_objc_nfabi) and
|
||||
(not MacOSXVersionMin.isvalid or
|
||||
(MacOSXVersionMin.relationto(10,6,0)>=0)) then
|
||||
msgsendname:='OBJC_MSGSENDSUPER2_STRET'
|
||||
{$endif onlymacosx10_6 or arm}
|
||||
else
|
||||
msgsendname:='OBJC_MSGSENDSUPER_STRET'
|
||||
end
|
||||
@ -2781,12 +2781,12 @@ implementation
|
||||
{ default }
|
||||
else
|
||||
{$endif aarch64}
|
||||
if not(cnf_inherited in callnodeflags) then
|
||||
msgsendname:='OBJC_MSGSEND'
|
||||
{$if defined(onlymacosx10_6) or defined(arm) or defined(aarch64)}
|
||||
else if (target_info.system in systems_objc_nfabi) then
|
||||
if not(cnf_inherited in callnodeflags) then
|
||||
msgsendname:='OBJC_MSGSEND'
|
||||
else if (target_info.system in systems_objc_nfabi) and
|
||||
(not MacOSXVersionMin.isvalid or
|
||||
(MacOSXVersionMin.relationto(10,6,0)>=0)) then
|
||||
msgsendname:='OBJC_MSGSENDSUPER2'
|
||||
{$endif onlymacosx10_6 or arm}
|
||||
else
|
||||
msgsendname:='OBJC_MSGSENDSUPER';
|
||||
|
||||
|
@ -52,7 +52,7 @@ interface
|
||||
implementation
|
||||
|
||||
uses
|
||||
globtype,
|
||||
globtype,globals,versioncmp,
|
||||
cutils,
|
||||
pass_1,
|
||||
verbose,systems,
|
||||
@ -153,13 +153,13 @@ end;
|
||||
{ in case we are in a category method, we need the metaclass of the
|
||||
superclass class extended by this category (= metaclass of superclass of superclass)
|
||||
for the fragile abi, and the metaclass of the superclass for the non-fragile ABI }
|
||||
{$if defined(onlymacosx10_6) or defined(arm) or defined(aarch64)}
|
||||
{ NOTE: those send2 methods are only available on Mac OS X 10.6 and later!
|
||||
(but also on all iPhone SDK revisions we support) }
|
||||
if (target_info.system in systems_objc_nfabi) then
|
||||
if (target_info.system in systems_objc_nfabi) and
|
||||
(not MacOSXVersionMin.isvalid or
|
||||
(MacOSXVersionMin.relationto(10,6,0)>=0)) then
|
||||
result:=cloadvmtaddrnode.create(ctypenode.create(tobjectdef(tclassrefdef(def).pointeddef).childof))
|
||||
else
|
||||
{$endif onlymacosx10_6 or arm aarch64}
|
||||
result:=cloadvmtaddrnode.create(ctypenode.create(tobjectdef(tclassrefdef(def).pointeddef).childof.childof));
|
||||
tloadvmtaddrnode(result).forcall:=true;
|
||||
result:=cloadvmtaddrnode.create(result);
|
||||
@ -183,14 +183,14 @@ end;
|
||||
tloadvmtaddrnode(result).forcall:=true;
|
||||
end;
|
||||
|
||||
{$if defined(onlymacosx10_6) or defined(arm) or defined(aarch64)}
|
||||
{ For the non-fragile ABI, the superclass send2 method itself loads the
|
||||
superclass. For the fragile ABI, we have to do this ourselves.
|
||||
|
||||
NOTE: those send2 methods are only available on Mac OS X 10.6 and later!
|
||||
(but also on all iPhone SDK revisions we support) }
|
||||
if not(target_info.system in systems_objc_nfabi) then
|
||||
{$endif onlymacosx10_6 or arm or aarch64}
|
||||
if not(target_info.system in systems_objc_nfabi) or
|
||||
(MacOSXVersionMin.isvalid and
|
||||
(MacOSXVersionMin.relationto(10,6,0)<0)) then
|
||||
result:=objcloadbasefield(result,'SUPERCLASS');
|
||||
typecheckpass(result);
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user