Forráskód Böngészése

* fixed forwardpointer problem with multiple forwards for the same
typesym. It now uses a linkedlist instead of a single pointer

peter 26 éve
szülő
commit
f8f66faad4
2 módosított fájl, 34 hozzáadás és 10 törlés
  1. 22 8
      compiler/pdecl.pas
  2. 12 2
      compiler/symsymh.inc

+ 22 - 8
compiler/pdecl.pas

@@ -1058,6 +1058,7 @@ unit pdecl;
          hs         : string;
          pcrd       : pclassrefdef;
          hp1        : pdef;
+         hfp        : pforwardpointer;
          oldprocsym : pprocsym;
          oldparse_only : boolean;
          classnamelabel : plabel;
@@ -1124,9 +1125,13 @@ unit pdecl;
                         {Anyhow forwards should only be allowed
                         inside a type statement ??
                         don't you think so }
-                        if (lasttypesym<>nil)
-                          and ((lasttypesym^.properties and sp_forwarddef)<>0) then
-                            lasttypesym^.forwardpointer:=ppointerdef(pcrd);
+                        if (lasttypesym<>nil) and ((lasttypesym^.properties and sp_forwarddef)<>0) then
+                         begin
+                           new(hfp);
+                           hfp^.next:=lasttypesym^.forwardpointer;
+                           hfp^.def:=ppointerdef(pcrd);
+                           lasttypesym^.forwardpointer:=hfp;
+                         end;
                         forwardsallowed:=false;
                      end
                    else
@@ -1800,6 +1805,8 @@ unit pdecl;
              ap^.definition:=hp1;
         end;
 
+      var
+        hfp : pforwardpointer;
       begin
          p:=nil;
          case token of
@@ -1891,9 +1898,13 @@ unit pdecl;
                  {Anyhow forwards should only be allowed
                  inside a type statement ??
                  don't you think so }
-                 if (lasttypesym<>nil)
-                   and ((lasttypesym^.properties and sp_forwarddef)<>0) then
-                     lasttypesym^.forwardpointer:=ppointerdef(p);
+                 if (lasttypesym<>nil) and ((lasttypesym^.properties and sp_forwarddef)<>0) then
+                  begin
+                    new(hfp);
+                    hfp^.next:=lasttypesym^.forwardpointer;
+                    hfp^.def:=ppointerdef(p);
+                    lasttypesym^.forwardpointer:=hfp;
+                  end;
                  forwardsallowed:=false;
               end;
             _RECORD:
@@ -2007,7 +2018,6 @@ unit pdecl;
                   begin
                      newtype:=new(ptypesym,init(typename,read_type(typename)));
                      { load newtype with the new pointer to the inserted type
-
                        because it can be an already defined forwarded type !! }
                      newtype:=ptypesym(symtablestack^.insert(newtype));
                   end;
@@ -2119,7 +2129,11 @@ unit pdecl;
 end.
 {
   $Log$
-  Revision 1.91  1998-12-30 22:15:46  peter
+  Revision 1.92  1999-01-14 21:49:58  peter
+    * fixed forwardpointer problem with multiple forwards for the same
+      typesym. It now uses a linkedlist instead of a single pointer
+
+  Revision 1.91  1998/12/30 22:15:46  peter
     + farpointer type
     * absolutesym now also stores if its far
 

+ 12 - 2
compiler/symsymh.inc

@@ -145,9 +145,15 @@
 {$endif GDB}
        end;
 
+       pforwardpointer=^tforwardpointer;
+       tforwardpointer=record
+         next : pforwardpointer;
+         def  : ppointerdef;
+       end;
+
        ttypesym = object(tsym)
           definition : pdef;
-          forwardpointer : ppointerdef;
+          forwardpointer : pforwardpointer;
 {$ifdef GDB}
           isusedinstab : boolean;
 {$endif GDB}
@@ -321,7 +327,11 @@
 
 {
   $Log$
-  Revision 1.12  1999-01-12 14:25:37  peter
+  Revision 1.13  1999-01-14 21:49:59  peter
+    * fixed forwardpointer problem with multiple forwards for the same
+      typesym. It now uses a linkedlist instead of a single pointer
+
+  Revision 1.12  1999/01/12 14:25:37  peter
     + BrowserLog for browser.log generation
     + BrowserCol for browser info in TCollections
     * released all other UseBrowser