mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 15:59:28 +01:00 
			
		
		
		
	Fix inlining of record methods across units if the unit with the method definitions is already compiled.
symdef.pas: + tabstractrecorddef: implement buildderefimpl and derefimpl which works on the symtable (especially derefimpl is important here) - trecorddef & tobjectdef: remove buildderefimpl; it's already handled by the tabstractrecorddef one now - tobjectdef: remove the part of derefimpl that's already handled by tabstractrecorddef git-svn-id: trunk@28267 -
This commit is contained in:
		
							parent
							
								
									0d96963459
								
							
						
					
					
						commit
						d46ae01589
					
				@ -259,6 +259,8 @@ interface
 | 
			
		||||
          constructor ppuload(dt:tdeftyp;ppufile:tcompilerppufile);
 | 
			
		||||
          procedure ppuwrite(ppufile:tcompilerppufile);override;
 | 
			
		||||
          destructor destroy; override;
 | 
			
		||||
          procedure buildderefimpl;override;
 | 
			
		||||
          procedure derefimpl;override;
 | 
			
		||||
          procedure check_forwards; virtual;
 | 
			
		||||
          function find_procdef_bytype(pt:tproctypeoption): tprocdef;
 | 
			
		||||
          function GetSymtable(t:tGetSymtable):TSymtable;override;
 | 
			
		||||
@ -303,7 +305,6 @@ interface
 | 
			
		||||
            override ppuwrite_platform instead }
 | 
			
		||||
          procedure ppuwrite(ppufile:tcompilerppufile);override;final;
 | 
			
		||||
          procedure buildderef;override;
 | 
			
		||||
          procedure buildderefimpl;override;
 | 
			
		||||
          procedure deref;override;
 | 
			
		||||
          function  size:asizeint;override;
 | 
			
		||||
          function  alignment : shortint;override;
 | 
			
		||||
@ -410,7 +411,6 @@ interface
 | 
			
		||||
          function GetTypeName:string;override;
 | 
			
		||||
          procedure buildderef;override;
 | 
			
		||||
          procedure deref;override;
 | 
			
		||||
          procedure buildderefimpl;override;
 | 
			
		||||
          procedure derefimpl;override;
 | 
			
		||||
          procedure resetvmtentries;
 | 
			
		||||
          procedure copyvmtentries(objdef:tobjectdef);
 | 
			
		||||
@ -3705,6 +3705,23 @@ implementation
 | 
			
		||||
        inherited destroy;
 | 
			
		||||
      end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    procedure tabstractrecorddef.buildderefimpl;
 | 
			
		||||
      begin
 | 
			
		||||
         inherited buildderefimpl;
 | 
			
		||||
         if not (df_copied_def in defoptions) then
 | 
			
		||||
           tstoredsymtable(symtable).buildderefimpl;
 | 
			
		||||
      end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    procedure tabstractrecorddef.derefimpl;
 | 
			
		||||
      begin
 | 
			
		||||
        inherited derefimpl;
 | 
			
		||||
        if not (df_copied_def in defoptions) then
 | 
			
		||||
          tstoredsymtable(symtable).derefimpl;
 | 
			
		||||
      end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    procedure tabstractrecorddef.check_forwards;
 | 
			
		||||
      begin
 | 
			
		||||
        { the defs of a copied def are defined for the original type only }
 | 
			
		||||
@ -4016,14 +4033,6 @@ implementation
 | 
			
		||||
      end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    procedure trecorddef.buildderefimpl;
 | 
			
		||||
      begin
 | 
			
		||||
         inherited buildderefimpl;
 | 
			
		||||
         if not (df_copied_def in defoptions) then
 | 
			
		||||
           tstoredsymtable(symtable).buildderefimpl;
 | 
			
		||||
      end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    procedure trecorddef.deref;
 | 
			
		||||
      begin
 | 
			
		||||
         inherited deref;
 | 
			
		||||
@ -6183,19 +6192,9 @@ implementation
 | 
			
		||||
      end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    procedure tobjectdef.buildderefimpl;
 | 
			
		||||
      begin
 | 
			
		||||
         inherited buildderefimpl;
 | 
			
		||||
         if not (df_copied_def in defoptions) then
 | 
			
		||||
           tstoredsymtable(symtable).buildderefimpl;
 | 
			
		||||
      end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    procedure tobjectdef.derefimpl;
 | 
			
		||||
      begin
 | 
			
		||||
         inherited derefimpl;
 | 
			
		||||
         if not (df_copied_def in defoptions) then
 | 
			
		||||
           tstoredsymtable(symtable).derefimpl;
 | 
			
		||||
         { the procdefs are not owned by the class helper procsyms, so they
 | 
			
		||||
           are not stored/restored either -> re-add them here }
 | 
			
		||||
         if (objecttype=odt_objcclass) or
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user