Browse Source

* store defstates in ppu, this field keeps the info what
is generated for a def so it can be reused, e.g. dwarf debuginfo

git-svn-id: trunk@8920 -

peter 18 years ago
parent
commit
273bfffe5b
3 changed files with 29 additions and 8 deletions
  1. 1 1
      compiler/ppu.pas
  2. 5 3
      compiler/symdef.pas
  3. 23 4
      compiler/utils/ppudump.pp

+ 1 - 1
compiler/ppu.pas

@@ -43,7 +43,7 @@ type
 {$endif Test_Double_checksum}
 {$endif Test_Double_checksum}
 
 
 const
 const
-  CurrentPPUVersion=85;
+  CurrentPPUVersion=86;
 
 
 { buffer sizes }
 { buffer sizes }
   maxentrysize = 1024;
   maxentrysize = 1024;

+ 5 - 3
compiler/symdef.pas

@@ -889,6 +889,7 @@ implementation
          { load }
          { load }
          ppufile.getderef(typesymderef);
          ppufile.getderef(typesymderef);
          ppufile.getsmallset(defoptions);
          ppufile.getsmallset(defoptions);
+         ppufile.getsmallset(defstates);
          if df_generic in defoptions then
          if df_generic in defoptions then
            begin
            begin
              sizeleft:=ppufile.getlongint;
              sizeleft:=ppufile.getlongint;
@@ -952,10 +953,11 @@ implementation
         ppufile.putlongint(DefId);
         ppufile.putlongint(DefId);
         ppufile.putderef(typesymderef);
         ppufile.putderef(typesymderef);
         ppufile.putsmallset(defoptions);
         ppufile.putsmallset(defoptions);
+        oldintfcrc:=ppufile.do_interface_crc;
+        ppufile.do_interface_crc:=false;
+        ppufile.putsmallset(defstates);
         if df_generic in defoptions then
         if df_generic in defoptions then
           begin
           begin
-            oldintfcrc:=ppufile.do_interface_crc;
-            ppufile.do_interface_crc:=false;
             if assigned(generictokenbuf) then
             if assigned(generictokenbuf) then
               begin
               begin
                 sizeleft:=generictokenbuf.size;
                 sizeleft:=generictokenbuf.size;
@@ -974,8 +976,8 @@ implementation
                 ppufile.putdata(buf,i);
                 ppufile.putdata(buf,i);
                 dec(sizeleft,i);
                 dec(sizeleft,i);
               end;
               end;
-            ppufile.do_interface_crc:=oldintfcrc;
           end;
           end;
+        ppufile.do_interface_crc:=oldintfcrc;
         if df_specialization in defoptions then
         if df_specialization in defoptions then
           ppufile.putderef(genericdefderef);
           ppufile.putderef(genericdefderef);
       end;
       end;

+ 23 - 4
compiler/utils/ppudump.pp

@@ -780,6 +780,7 @@ const
   );
   );
 var
 var
   defoptions : tdefoptions;
   defoptions : tdefoptions;
+  defstates  : tdefstates;
   i      : longint;
   i      : longint;
   first  : boolean;
   first  : boolean;
   tokenbufsize : longint;
   tokenbufsize : longint;
@@ -806,8 +807,22 @@ begin
     end;
     end;
   writeln;
   writeln;
 
 
-  if df_unique in defoptions then
-    writeln  (space,'      Unique type symbol');
+  write  (space,'        DefStates : ');
+  ppufile.getsmallset(defstates);
+  if defstates<>[] then
+    begin
+      first:=true;
+      for i:=1to defstateinfos do
+       if (defstate[i].mask in defstates) then
+        begin
+          if first then
+            first:=false
+          else
+            write(', ');
+          write(defstate[i].str);
+        end;
+    end;
+  writeln;
 
 
   if df_generic in defoptions then
   if df_generic in defoptions then
     begin
     begin
@@ -1209,6 +1224,7 @@ begin
   readcommonsym(s);
   readcommonsym(s);
   writeln(space,'         Spez : ',Varspez2Str(ppufile.getbyte));
   writeln(space,'         Spez : ',Varspez2Str(ppufile.getbyte));
   writeln(space,'      Regable : ',Varregable2Str(ppufile.getbyte));
   writeln(space,'      Regable : ',Varregable2Str(ppufile.getbyte));
+  writeln(space,'   Addr Taken : ',(ppufile.getbyte<>0));
   write  (space,'     Var Type : ');
   write  (space,'     Var Type : ');
   readderef;
   readderef;
   ppufile.getsmallset(varoptions);
   ppufile.getsmallset(varoptions);
@@ -1444,7 +1460,7 @@ begin
                  begin
                  begin
                    write  (space,'  OrdinalType : ');
                    write  (space,'  OrdinalType : ');
                    readderef;
                    readderef;
-                   writeln(space,'        Value : ',getint64);
+                   writeln(space,'        Value : ',constexp.tostr(getexprint));
                  end;
                  end;
                constpointer :
                constpointer :
                  begin
                  begin
@@ -1902,7 +1918,10 @@ begin
            end;
            end;
 
 
          ibformaldef :
          ibformaldef :
-           readcommondef('Generic definition (void-typ)');
+           begin
+             readcommondef('Generic definition (void-typ)');
+             writeln(space,'         Is Typed : ',(getbyte<>0));
+           end;
 
 
          ibundefineddef :
          ibundefineddef :
            readcommondef('Undefined definition (generic parameter)');
            readcommondef('Undefined definition (generic parameter)');