mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-31 04:31:35 +01:00 
			
		
		
		
	* fixed dumping objectdefs after r14185
+ dump wpo info git-svn-id: trunk@14484 -
This commit is contained in:
		
							parent
							
								
									616289f1c8
								
							
						
					
					
						commit
						d219109b16
					
				| @ -630,7 +630,7 @@ begin | ||||
| end; | ||||
| 
 | ||||
| 
 | ||||
| procedure readderef; | ||||
| procedure readderef(const derefspace: string); | ||||
| type | ||||
|   tdereftype = (deref_nil, | ||||
|     deref_unit, | ||||
| @ -653,7 +653,7 @@ begin | ||||
|       writeln('!! Error: Deref idx ',idx,' > ',derefdatalen); | ||||
|       exit; | ||||
|     end; | ||||
|   write('(',idx,') '); | ||||
|   write(derefspace,'(',idx,') '); | ||||
|   pdata:=@derefdata[idx]; | ||||
|   i:=0; | ||||
|   n:=pdata[i]; | ||||
| @ -725,7 +725,7 @@ const | ||||
| var | ||||
|   sl : tsltype; | ||||
| begin | ||||
|   readderef; | ||||
|   readderef(''); | ||||
|   repeat | ||||
|     sl:=tsltype(ppufile.getbyte); | ||||
|     if sl=sl_none then | ||||
| @ -735,14 +735,14 @@ begin | ||||
|       sl_call, | ||||
|       sl_load, | ||||
|       sl_subscript : | ||||
|         readderef; | ||||
|         readderef(''); | ||||
|       sl_absolutetype, | ||||
|       sl_typeconv : | ||||
|         readderef; | ||||
|         readderef(''); | ||||
|       sl_vec : | ||||
|         begin | ||||
|           writeln(ppufile.getlongint); | ||||
|           readderef; | ||||
|           readderef(''); | ||||
|         end; | ||||
|     end; | ||||
|   until false; | ||||
| @ -889,7 +889,7 @@ begin | ||||
|   writeln(space,'** Definition Id ',ppufile.getlongint,' **'); | ||||
|   writeln(space,s); | ||||
|   write  (space,'      Type symbol : '); | ||||
|   readderef; | ||||
|   readderef(''); | ||||
|   write  (space,'       DefOptions : '); | ||||
|   ppufile.getsmallset(defoptions); | ||||
|   if defoptions<>[] then | ||||
| @ -1027,7 +1027,7 @@ begin | ||||
|   if df_specialization in defoptions then | ||||
|     begin | ||||
|       write  (space,' Orig. GenericDef : '); | ||||
|       readderef; | ||||
|       readderef(''); | ||||
|     end; | ||||
|   current_defoptions:=defoptions; | ||||
| end; | ||||
| @ -1234,7 +1234,7 @@ var | ||||
|   tempbuf : array[0..255] of byte; | ||||
| begin | ||||
|   write(space,'      Return type : '); | ||||
|   readderef; | ||||
|   readderef(''); | ||||
|   writeln(space,'         Fpu used : ',ppufile.getbyte); | ||||
|   proctypeoption:=tproctypeoption(ppufile.getbyte); | ||||
|   write(space,'       TypeOption : '); | ||||
| @ -1350,7 +1350,7 @@ begin | ||||
|   writeln(space,'      Regable : ',Varregable2Str(ppufile.getbyte)); | ||||
|   writeln(space,'   Addr Taken : ',(ppufile.getbyte<>0)); | ||||
|   write  (space,'     Var Type : '); | ||||
|   readderef; | ||||
|   readderef(''); | ||||
|   ppufile.getsmallset(varoptions); | ||||
|   if varoptions<>[] then | ||||
|    begin | ||||
| @ -1522,6 +1522,64 @@ begin | ||||
| end; | ||||
| 
 | ||||
| 
 | ||||
| procedure ReadCreatedObjTypes; | ||||
| var | ||||
|   i,j, | ||||
|   len, | ||||
|   bssize: longint; | ||||
|   bs: pbyte; | ||||
| begin | ||||
|   if ppufile.readentry<>ibcreatedobjtypes then | ||||
|     begin | ||||
|       writeln('!! ibcreatedobjtypes entry not found'); | ||||
|       ppufile.skipdata(ppufile.entrysize); | ||||
|       exit | ||||
|     end; | ||||
|   writeln; | ||||
|   writeln(space,'WPO info'); | ||||
|   writeln(space,'--------'); | ||||
| 
 | ||||
|   len:=ppufile.getlongint; | ||||
|   writeln(space,'** Instantiated Object/Class types: ',len,' **'); | ||||
|   space:=space+'  '; | ||||
|   for i:=0 to len-1 do | ||||
|     readderef(space); | ||||
|   setlength(space,length(space)-2); | ||||
| 
 | ||||
|   len:=ppufile.getlongint; | ||||
|   writeln(space,'** Instantiated ClassRef types: ',len,' **'); | ||||
|   space:=space+'  '; | ||||
|   for i:=0 to len-1 do | ||||
|     readderef(space); | ||||
|   setlength(space,length(space)-2); | ||||
| 
 | ||||
|   len:=ppufile.getlongint; | ||||
|   writeln(space,'** Possibly instantiated ClassRef types : ',len,' **'); | ||||
|   space:=space+'  '; | ||||
|   for i:=0 to len-1 do | ||||
|     readderef(space); | ||||
|   setlength(space,length(space)-2); | ||||
| 
 | ||||
|   len:=ppufile.getlongint; | ||||
|   writeln(space,'** Class types with called virtual methods info : ',len,' **'); | ||||
|   space:=space+'  '; | ||||
|   for i:=0 to len-1 do | ||||
|     begin | ||||
|       write(space,'Class def : '); | ||||
|       readderef(''); | ||||
|       write(space+'  ','Called vmtentries : '); | ||||
|       bssize:=ppufile.getlongint; | ||||
|       getmem(bs,bssize); | ||||
|       ppufile.readdata(bs^,bssize); | ||||
|       for j:=0 to bssize*8-1 do | ||||
|         if (((bs+j shr 3)^ shr (j and 7)) and 1) <> 0 then | ||||
|           write(j,', '); | ||||
|       writeln; | ||||
|       freemem(bs); | ||||
|     end; | ||||
|   setlength(space,length(space)-2); | ||||
| end; | ||||
| 
 | ||||
| {**************************************************************************** | ||||
|                              Read Symbols Part | ||||
| ****************************************************************************} | ||||
| @ -1575,7 +1633,7 @@ begin | ||||
|            begin | ||||
|              readcommonsym('Type symbol '); | ||||
|              write(space,'  Result Type : '); | ||||
|              readderef; | ||||
|              readderef(''); | ||||
|            end; | ||||
| 
 | ||||
|          ibprocsym : | ||||
| @ -1585,7 +1643,7 @@ begin | ||||
|              for i:=1 to len do | ||||
|               begin | ||||
|                 write(space,'   Definition : '); | ||||
|                 readderef; | ||||
|                 readderef(''); | ||||
|               end; | ||||
|            end; | ||||
| 
 | ||||
| @ -1597,13 +1655,13 @@ begin | ||||
|                constord : | ||||
|                  begin | ||||
|                    write  (space,'  OrdinalType : '); | ||||
|                    readderef; | ||||
|                    readderef(''); | ||||
|                    writeln(space,'        Value : ',constexp.tostr(getexprint)); | ||||
|                  end; | ||||
|                constpointer : | ||||
|                  begin | ||||
|                    write  (space,'  PointerType : '); | ||||
|                    readderef; | ||||
|                    readderef(''); | ||||
|                    writeln(space,'        Value : ',getlongint) | ||||
|                  end; | ||||
|                conststring, | ||||
| @ -1622,7 +1680,7 @@ begin | ||||
|                constset : | ||||
|                  begin | ||||
|                    write (space,'      Set Type : '); | ||||
|                    readderef; | ||||
|                    readderef(''); | ||||
|                    for i:=1to 4 do | ||||
|                     begin | ||||
|                       write (space,'        Value : '); | ||||
| @ -1685,7 +1743,7 @@ begin | ||||
|            begin | ||||
|              readabstractvarsym('Global Variable symbol ',varoptions); | ||||
|              write  (space,' DefaultConst : '); | ||||
|              readderef; | ||||
|              readderef(''); | ||||
|              if (vo_has_mangledname in varoptions) then | ||||
|                writeln(space,' Mangledname : ',getstring); | ||||
|            end; | ||||
| @ -1694,14 +1752,14 @@ begin | ||||
|            begin | ||||
|              readabstractvarsym('Local Variable symbol ',varoptions); | ||||
|              write  (space,' DefaultConst : '); | ||||
|              readderef; | ||||
|              readderef(''); | ||||
|            end; | ||||
| 
 | ||||
|          ibparavarsym : | ||||
|            begin | ||||
|              readabstractvarsym('Parameter Variable symbol ',varoptions); | ||||
|              write  (space,' DefaultConst : '); | ||||
|              readderef; | ||||
|              readderef(''); | ||||
|              writeln(space,'       ParaNr : ',getword); | ||||
|              writeln(space,'     VarState : ',getbyte); | ||||
|              if (vo_has_explicit_paraloc in varoptions) then | ||||
| @ -1715,7 +1773,7 @@ begin | ||||
|            begin | ||||
|              readcommonsym('Enumeration symbol '); | ||||
|              write  (space,'   Definition : '); | ||||
|              readderef; | ||||
|              readderef(''); | ||||
|              writeln(space,'        Value : ',getlongint); | ||||
|            end; | ||||
| 
 | ||||
| @ -1749,13 +1807,13 @@ begin | ||||
|              i:=getlongint; | ||||
|              writeln(space,'  PropOptions : ',i); | ||||
|              write  (space,' OverrideProp : '); | ||||
|              readderef; | ||||
|              readderef(''); | ||||
|              write  (space,'    Prop Type : '); | ||||
|              readderef; | ||||
|              readderef(''); | ||||
|              writeln(space,'        Index : ',getlongint); | ||||
|              writeln(space,'      Default : ',getlongint); | ||||
|              write  (space,'   Index Type : '); | ||||
|              readderef; | ||||
|              readderef(''); | ||||
|              write  (space,'   Readaccess : '); | ||||
|              readpropaccesslist(space+'         Sym: '); | ||||
|              write  (space,'  Writeaccess : '); | ||||
| @ -1832,7 +1890,7 @@ begin | ||||
|            begin | ||||
|              readcommondef('Pointer definition'); | ||||
|              write  (space,'     Pointed Type : '); | ||||
|              readderef; | ||||
|              readderef(''); | ||||
|              writeln(space,'           Is Far : ',(getbyte<>0)); | ||||
|            end; | ||||
| 
 | ||||
| @ -1873,9 +1931,9 @@ begin | ||||
|            begin | ||||
|              readcommondef('Array definition'); | ||||
|              write  (space,'     Element type : '); | ||||
|              readderef; | ||||
|              readderef(''); | ||||
|              write  (space,'       Range Type : '); | ||||
|              readderef; | ||||
|              readderef(''); | ||||
|              writeln(space,'            Range : ',getaint,' to ',getaint); | ||||
|              write  (space,'          Options : '); | ||||
|              readarraydefoptions; | ||||
| @ -1890,9 +1948,9 @@ begin | ||||
|              writeln(space,'           Number : ',getword); | ||||
|              writeln(space,'            Level : ',getbyte); | ||||
|              write  (space,'            Class : '); | ||||
|              readderef; | ||||
|              readderef(''); | ||||
|              write  (space,'          Procsym : '); | ||||
|              readderef; | ||||
|              readderef(''); | ||||
|              write  (space,'         File Pos : '); | ||||
|              readposinfo; | ||||
|              writeln(space,'       Visibility : ',Visibility2Str(ppufile.getbyte)); | ||||
| @ -1902,7 +1960,7 @@ begin | ||||
|                begin | ||||
|                  { library symbol for AmigaOS/MorphOS } | ||||
|                  write  (space,'   Library symbol : '); | ||||
|                  readderef; | ||||
|                  readderef(''); | ||||
|                end; | ||||
|              if (po_has_importdll in procoptions) then | ||||
|                writeln(space,'      Import DLL : ',getstring); | ||||
| @ -1918,7 +1976,7 @@ begin | ||||
|              if (po_has_inlininginfo in procoptions) then | ||||
|               begin | ||||
|                 write  (space,'       FuncretSym : '); | ||||
|                 readderef; | ||||
|                 readderef(''); | ||||
|                 ppufile.getsmallset(procinfooptions); | ||||
|                 writeln(space,'  ProcInfoOptions : ',dword(procinfooptions)); | ||||
|               end; | ||||
| @ -2023,12 +2081,13 @@ begin | ||||
|              end; | ||||
|              writeln(space,'    Name of Class : ',getstring); | ||||
|              writeln(space,'    External name : ',getstring); | ||||
|              writeln(space,'       Import lib : ',getstring); | ||||
|              writeln(space,'         DataSize : ',getaint); | ||||
|              writeln(space,'       FieldAlign : ',getbyte); | ||||
|              writeln(space,'      RecordAlign : ',getbyte); | ||||
|              writeln(space,'       Vmt offset : ',getlongint); | ||||
|              write  (space,  '   Ancestor Class : '); | ||||
|              readderef; | ||||
|              readderef(''); | ||||
|              write  (space,'          Options : '); | ||||
|              readobjectdefoptions; | ||||
| 
 | ||||
| @ -2046,7 +2105,7 @@ begin | ||||
|              for j:=1 to l do | ||||
|                begin | ||||
|                  write(space,'    '); | ||||
|                  readderef; | ||||
|                  readderef(''); | ||||
|                  writeln(space,'      Visibility: ',Visibility2Str(getbyte)); | ||||
|                end; | ||||
| 
 | ||||
| @ -2057,7 +2116,7 @@ begin | ||||
|                 for j:=1 to l do | ||||
|                  begin | ||||
|                    write  (space,'  - Definition : '); | ||||
|                    readderef; | ||||
|                    readderef(''); | ||||
|                    writeln(space,'       IOffset : ',getlongint); | ||||
|                  end; | ||||
|               end; | ||||
| @ -2065,7 +2124,7 @@ begin | ||||
|              if df_copied_def in current_defoptions then | ||||
|                begin | ||||
|                  writeln('  Copy of def: '); | ||||
|                  readderef; | ||||
|                  readderef(''); | ||||
|                end; | ||||
| 
 | ||||
|              if not EndOfEntry then | ||||
| @ -2089,7 +2148,7 @@ begin | ||||
|               1 : begin | ||||
|                     writeln('Typed'); | ||||
|                     write  (space,'      File of Type : '); | ||||
|                     readderef; | ||||
|                     readderef(''); | ||||
|                   end; | ||||
|               2 : writeln('Untyped'); | ||||
|              end; | ||||
| @ -2108,7 +2167,7 @@ begin | ||||
|            begin | ||||
|              readcommondef('Enumeration type definition'); | ||||
|              write(space,'Base enumeration type : '); | ||||
|              readderef; | ||||
|              readderef(''); | ||||
|              writeln(space,' Smallest element : ',getaint); | ||||
|              writeln(space,'  Largest element : ',getaint); | ||||
|              writeln(space,'             Size : ',getaint); | ||||
| @ -2118,14 +2177,14 @@ begin | ||||
|            begin | ||||
|              readcommondef('Class reference definition'); | ||||
|              write  (space,'    Pointed Type : '); | ||||
|              readderef; | ||||
|              readderef(''); | ||||
|            end; | ||||
| 
 | ||||
|          ibsetdef : | ||||
|            begin | ||||
|              readcommondef('Set definition'); | ||||
|              write  (space,'     Element type : '); | ||||
|              readderef; | ||||
|              readderef(''); | ||||
|              writeln(space,'             Size : ',getaint); | ||||
|              writeln(space,'         Set Base : ',getaint); | ||||
|              writeln(space,'          Set Max : ',getaint); | ||||
| @ -2442,6 +2501,7 @@ begin | ||||
|      else | ||||
|       ppufile.skipuntilentry(ibendsyms); | ||||
|    end; | ||||
|   ReadCreatedObjTypes; | ||||
| {shutdown ppufile} | ||||
|   ppufile.closefile; | ||||
|   ppufile.free; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Jonas Maebe
						Jonas Maebe