+ Added the pio_inline_not_possible flag to timplprocoption. It is set if a function can't be inline (contains an assembler block, etc). When calling such functions, no note "Call to subroutine "?" marked as inline is not inlined" is emitted.

git-svn-id: trunk@40254 -
This commit is contained in:
yury 2018-11-07 12:20:30 +00:00
parent 6bb752c637
commit dd60397165
4 changed files with 12 additions and 4 deletions

View File

@ -4373,8 +4373,12 @@ implementation
result:=pass1_inline
else
begin
if (po_inline in procdefinition.procoptions) and not(po_compilerproc in procdefinition.procoptions) then
Message1(cg_n_no_inline,tprocdef(procdefinition).customprocname([pno_proctypeoption, pno_paranames,pno_ownername, pno_noclassmarker]));
if (po_inline in procdefinition.procoptions) and not(po_compilerproc in procdefinition.procoptions) and
(procdefinition.typ=procdef) and
not (pio_inline_not_possible in tprocdef(procdefinition).implprocoptions) then
begin
Message1(cg_n_no_inline,tprocdef(procdefinition).customprocname([pno_proctypeoption, pno_paranames,pno_ownername, pno_noclassmarker]));
end;
mark_unregable_parameters;
result:=pass1_normal;
end;

View File

@ -141,6 +141,7 @@ implementation
procedure _no_inline(const reason: TMsgStr);
begin
include(procdef.implprocoptions,pio_inline_not_possible);
Message1(parser_h_not_supported_for_inline,reason);
Message(parser_h_inlining_disabled);
end;

View File

@ -423,7 +423,9 @@ type
{ the routine contains no code }
pio_empty,
{ the inline body of this routine is available }
pio_has_inlininginfo
pio_has_inlininginfo,
{ inline is not possible (has assembler block, etc) }
pio_inline_not_possible
);
timplprocoptions = set of timplprocoption;

View File

@ -2228,7 +2228,8 @@ type
const
piopt : array[low(timplprocoption)..high(timplprocoption)] of tpiopt=(
(mask:pio_empty; str:'IsEmpty'),
(mask:pio_has_inlininginfo; str:'HasInliningInfo')
(mask:pio_has_inlininginfo; str:'HasInliningInfo'),
(mask:pio_inline_not_possible; str:'InlineNotPossible')
);
var
i: timplprocoption;