diff --git a/components/codetools/codetree.pas b/components/codetools/codetree.pas index 0ce67962b9..a404366761 100644 --- a/components/codetools/codetree.pas +++ b/components/codetools/codetree.pas @@ -265,6 +265,8 @@ type psEnumerator, psVarargs, psVectorCall, + psNoReturn, + psNoInline, psEdgedBracket ); TAllProcedureSpecifiers = set of TProcedureSpecifier; @@ -277,6 +279,7 @@ const 'FAR', 'NEAR', 'FINAL', 'STATIC', 'MWPASCAL', 'NOSTACKFRAME', 'DEPRECATED', 'DISPID', 'PLATFORM', 'SAFECALL', 'UNIMPLEMENTED', 'EXPERIMENTAL', 'LIBRARY', 'ENUMERATOR', 'VARARGS', 'VECTORCALL', + 'NORETURN', 'NOINLINE', '[' ); diff --git a/components/codetools/keywordfunclists.pas b/components/codetools/keywordfunclists.pas index 4e87597b62..67480b1eb3 100644 --- a/components/codetools/keywordfunclists.pas +++ b/components/codetools/keywordfunclists.pas @@ -879,6 +879,7 @@ begin Add('MS_ABI_CDECL' ,{$ifdef FPC}@{$endif}AllwaysTrue); Add('EXTDECL' ,{$ifdef FPC}@{$endif}AllwaysTrue); // often used for macros ADD('MWPASCAL' ,{$ifdef FPC}@{$endif}AllwaysTrue); + Add('NOINLINE' ,{$ifdef FPC}@{$endif}AllwaysTrue); Add('NOSTACKFRAME' ,{$ifdef FPC}@{$endif}AllwaysTrue); Add('NORETURN' ,{$ifdef FPC}@{$endif}AllwaysTrue); Add('DEPRECATED' ,{$ifdef FPC}@{$endif}AllwaysTrue); @@ -934,6 +935,7 @@ begin Add('LOCAL' ,{$ifdef FPC}@{$endif}AllwaysTrue); ADD('MWPASCAL' ,{$ifdef FPC}@{$endif}AllwaysTrue); Add('NEAR' ,{$ifdef FPC}@{$endif}AllwaysTrue); + Add('NOINLINE' ,{$ifdef FPC}@{$endif}AllwaysTrue); Add('NORETURN' ,{$ifdef FPC}@{$endif}AllwaysTrue); Add('NOSTACKFRAME' ,{$ifdef FPC}@{$endif}AllwaysTrue); Add('OLDFPCCALL' ,{$ifdef FPC}@{$endif}AllwaysTrue); diff --git a/components/codetools/pascalparsertool.pas b/components/codetools/pascalparsertool.pas index 25bf7d0fb9..4a8adb97ba 100644 --- a/components/codetools/pascalparsertool.pas +++ b/components/codetools/pascalparsertool.pas @@ -1345,7 +1345,7 @@ function TPascalParserTool.KeyWordFuncClassMethod: boolean; proc specifiers without parameters: stdcall, virtual, abstract, dynamic, overload, override, cdecl, inline, - rtlproc, noreturn + rtlproc, noinline, noreturn proc specifiers with parameters: message diff --git a/components/codetools/ppuparser.pas b/components/codetools/ppuparser.pas index 553f937826..2e1a7282d9 100644 --- a/components/codetools/ppuparser.pas +++ b/components/codetools/ppuparser.pas @@ -413,6 +413,8 @@ type po_auto_raised_visibility, { procedure is far (x86 only) } po_far, + { Procedure can't be inlined } + po_noinline, { the procedure never returns, this information is usefull for dfa } po_noreturn ); @@ -545,6 +547,8 @@ const 'auto_raised_visibility', { procedure is far (x86 only) } 'far', + { Procedure can't be inlined } + 'noinline', { the procedure never returns, this information is usefull for dfa } 'noreturn' ); diff --git a/components/synedit/synhighlighterpas.pp b/components/synedit/synhighlighterpas.pp index dbc85ae562..a14213ecc3 100644 --- a/components/synedit/synhighlighterpas.pp +++ b/components/synedit/synhighlighterpas.pp @@ -1833,7 +1833,8 @@ end; function TSynPasSyn.Func92: TtkTokenKind; begin if D4syntax and KeyComp('overload') then Result := tkKey else - if KeyComp('Inherited') then Result := tkKey else Result := tkIdentifier; + if KeyComp('NoInline') then Result := tkKey else + if KeyComp('Inherited') then Result := tkKey else Result := tkIdentifier; end; function TSynPasSyn.Func94: TtkTokenKind;