Parcourir la source

* ppudump: Output "MethodPtr" attribute for procedural types.

git-svn-id: trunk@24504 -
yury il y a 12 ans
Parent
commit
ec6ff22588
2 fichiers modifiés avec 12 ajouts et 0 suppressions
  1. 2 0
      compiler/utils/ppuutils/ppudump.pp
  2. 10 0
      compiler/utils/ppuutils/ppuout.pp

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

@@ -1720,6 +1720,8 @@ begin
      if po_overridingmethod in procoptions then Include(ProcDef.Options, poOverriding);
      if po_overridingmethod in procoptions then Include(ProcDef.Options, poOverriding);
      if po_overload in procoptions then Include(ProcDef.Options, poOverload);
      if po_overload in procoptions then Include(ProcDef.Options, poOverload);
      if po_inline in procoptions then Include(ProcDef.Options, poInline);
      if po_inline in procoptions then Include(ProcDef.Options, poInline);
+     if (po_methodpointer in procoptions) and (ProcDef.DefType = dtProcType) then
+       TPpuProcTypeDef(ProcDef).MethodPtr:=True;
 
 
      write([space,'          Options : ']);
      write([space,'          Options : ']);
      first:=true;
      first:=true;

+ 10 - 0
compiler/utils/ppuutils/ppuout.pp

@@ -204,7 +204,10 @@ type
 
 
   { TPpuProcTypeDef }
   { TPpuProcTypeDef }
   TPpuProcTypeDef = class(TPpuProcDef)
   TPpuProcTypeDef = class(TPpuProcDef)
+  protected
+    procedure BeforeWriteItems(Output: TPpuOutput); override;
   public
   public
+    MethodPtr: boolean;
     constructor Create(AParent: TPpuContainerDef); override;
     constructor Create(AParent: TPpuContainerDef); override;
   end;
   end;
 
 
@@ -1033,6 +1036,13 @@ end;
 
 
 { TPpuProcTypeDef }
 { TPpuProcTypeDef }
 
 
+procedure TPpuProcTypeDef.BeforeWriteItems(Output: TPpuOutput);
+begin
+  inherited BeforeWriteItems(Output);
+  if MethodPtr then
+    Output.WriteBool('MethodPtr', MethodPtr);
+end;
+
 constructor TPpuProcTypeDef.Create(AParent: TPpuContainerDef);
 constructor TPpuProcTypeDef.Create(AParent: TPpuContainerDef);
 begin
 begin
   inherited Create(AParent);
   inherited Create(AParent);