Explorar el Código

+ 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 -
yury hace 6 años
padre
commit
dd60397165
Se han modificado 4 ficheros con 12 adiciones y 4 borrados
  1. 6 2
      compiler/ncal.pas
  2. 1 0
      compiler/psub.pas
  3. 3 1
      compiler/symconst.pas
  4. 2 1
      compiler/utils/ppuutils/ppudump.pp

+ 6 - 2
compiler/ncal.pas

@@ -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;

+ 1 - 0
compiler/psub.pas

@@ -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;

+ 3 - 1
compiler/symconst.pas

@@ -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;
 

+ 2 - 1
compiler/utils/ppuutils/ppudump.pp

@@ -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;