瀏覽代碼

* fix for snapshot failue
* order_overloaded reintrocduced and adapted to operators

pierre 25 年之前
父節點
當前提交
22a6677394
共有 3 個文件被更改,包括 24 次插入16 次删除
  1. 14 7
      compiler/symsym.inc
  2. 5 3
      compiler/symsymh.inc
  3. 5 6
      compiler/symtable.pas

+ 14 - 7
compiler/symsym.inc

@@ -410,7 +410,7 @@
                 end;
               pd:=pd^.nextoverloaded;
               { do not check defs of operators in other units }
-              if pd^.procsym<>@self then
+              if assigned(pd) and (pd^.procsym<>@self) then
                 pd:=nil;
            end;
       end;
@@ -451,20 +451,22 @@
 {$endif DONOTCHAINOPERATORS}
       end;
 
-{$ifdef DONOTCHAINOPERATORS}
     procedure tprocsym.order_overloaded;
-      var firstdef,currdef,lastdef : pprocdef;
+      var firstdef,currdef,lastdef,nextopdef : pprocdef;
       begin
+         if not assigned(definition) then
+           exit;
          firstdef:=definition;
          currdef:=definition;
-         while assigned(currdef) do
+         while assigned(currdef) and (currdef^.owner=firstdef^.owner) do
            begin
              currdef^.count:=false;
              currdef:=currdef^.nextoverloaded;
            end;
+         nextopdef:=currdef;
          definition:=definition^.nextoverloaded;
          firstdef^.nextoverloaded:=nil;
-         while assigned(definition) do
+         while (definition<>nextopdef) do
            begin
              currdef:=firstdef;
              lastdef:=definition;
@@ -488,10 +490,11 @@
          while assigned(currdef) do
            begin
              currdef^.count:=true;
+             lastdef:=currdef;
              currdef:=currdef^.nextoverloaded;
            end;
+         lastdef^.nextoverloaded:=nextopdef;
       end;
-{$endif DONOTCHAINOPERATORS}
 
     procedure tprocsym.write;
       begin
@@ -2144,7 +2147,11 @@
 
 {
   $Log$
-  Revision 1.143  2000-04-26 08:54:19  pierre
+  Revision 1.144  2000-04-27 10:06:04  pierre
+    * fix for snapshot failue
+    * order_overloaded reintrocduced and adapted to operators
+
+  Revision 1.143  2000/04/26 08:54:19  pierre
     * More changes for operator bug
       Order_overloaded method removed because it conflicted with
       new implementation where the defs are ordered

+ 5 - 3
compiler/symsymh.inc

@@ -115,9 +115,7 @@
           { tests, if all procedures definitions are defined and not }
           { only forward                                             }
           procedure check_forward;
-{$ifdef DONOTCHAINOPERATORS}
           procedure order_overloaded;
-{$endif DONOTCHAINOPERATORS}
           procedure write;virtual;
           procedure deref;virtual;
           procedure load_references;virtual;
@@ -319,7 +317,11 @@
 
 {
   $Log$
-  Revision 1.47  2000-04-26 08:54:19  pierre
+  Revision 1.48  2000-04-27 10:06:04  pierre
+    * fix for snapshot failue
+    * order_overloaded reintrocduced and adapted to operators
+
+  Revision 1.47  2000/04/26 08:54:19  pierre
     * More changes for operator bug
       Order_overloaded method removed because it conflicted with
       new implementation where the defs are ordered

+ 5 - 6
compiler/symtable.pas

@@ -1469,13 +1469,11 @@ implementation
       end;
 
 
-{$ifdef DONOTCHAINOPERATORS}
     procedure order_overloads(p : Pnamedindexobject);
       begin
          if psym(p)^.typ=procsym then
            pprocsym(p)^.order_overloaded;
       end;
-{$endif DONOTCHAINOPERATORS}
 
     procedure tsymtable.foreach(proc2call : tnamedindexcallback);
       begin
@@ -1753,11 +1751,8 @@ implementation
                aktlocalsymtable:=@self;
              end;
          end;
-{$ifdef DONOTCHAINOPERATORS}
-       { obsolete code DO NOT USE it anymore PM }
        { order procsym overloads }
          foreach({$ifndef TP}@{$endif}Order_overloads);
-{$endif DONOTCHAINOPERATORS}
          { write definitions }
          writedefs;
          { write symbols }
@@ -2884,7 +2879,11 @@ implementation
 end.
 {
   $Log$
-  Revision 1.86  2000-04-26 08:54:19  pierre
+  Revision 1.87  2000-04-27 10:06:04  pierre
+    * fix for snapshot failue
+    * order_overloaded reintrocduced and adapted to operators
+
+  Revision 1.86  2000/04/26 08:54:19  pierre
     * More changes for operator bug
       Order_overloaded method removed because it conflicted with
       new implementation where the defs are ordered