Selaa lähdekoodia

* small bug in systems.pas corrected
+ operators in different units better hanlded

pierre 27 vuotta sitten
vanhempi
commit
2d681748ac
4 muutettua tiedostoa jossa 57 lisäystä ja 13 poistoa
  1. 10 2
      compiler/parser.pas
  2. 22 3
      compiler/symdef.inc
  3. 19 6
      compiler/symsym.inc
  4. 6 2
      compiler/systems.pas

+ 10 - 2
compiler/parser.pas

@@ -290,7 +290,11 @@ unit parser;
               getsym('POWER',false);
               if assigned(srsym) and (srsym^.typ=procsym) and
                  (overloaded_operators[STARSTAR]=nil) then
-                overloaded_operators[STARSTAR]:=pprocsym(srsym);
+                begin
+                   overloaded_operators[STARSTAR]:=
+                     new(pprocsym,init(overloaded_names[STARSTAR]));
+                   overloaded_operators[STARSTAR]^.definition:=pprocsym(srsym)^.definition;
+                end;
               make_ref:=true;
            end
          else
@@ -466,7 +470,11 @@ done:
 end.
 {
   $Log$
-  Revision 1.24  1998-06-13 00:10:08  peter
+  Revision 1.25  1998-06-15 15:38:07  pierre
+    * small bug in systems.pas corrected
+    + operators in different units better hanlded
+
+  Revision 1.24  1998/06/13 00:10:08  peter
     * working browser and newppu
     * some small fixes against crashes which occured in bp7 (but not in
       fpc?!)

+ 22 - 3
compiler/symdef.inc

@@ -282,10 +282,16 @@
 
     procedure tdef.writename;
 
+      var
+         str : string;
+         
       begin
          { name }
          if assigned(sym) then
-           rttilist^.concat(new(pai_string,init(chr(length(sym^.name))+sym^.name)))
+           begin
+              str:=sym^.name;
+              rttilist^.concat(new(pai_string,init(chr(length(str))+str)));
+           end
          else
            rttilist^.concat(new(pai_string,init(#0)))
       end;
@@ -2023,7 +2029,16 @@
 {$endif alpha}
          writestring(mangledname);
          writelong(extnumber);
-         writedefref(nextoverloaded);
+         if (options and pooperator) = 0 then
+           writedefref(nextoverloaded)
+         else
+           begin
+              { only write the overloads from the same unit }
+              if nextoverloaded^.owner=owner then
+                writedefref(nextoverloaded)
+              else
+                writedefref(nil);
+           end;
          writedefref(_class);
          if (options and poinline) <> 0 then
            begin
@@ -2631,7 +2646,11 @@
 
 {
   $Log$
-  Revision 1.12  1998-06-15 14:30:12  daniel
+  Revision 1.13  1998-06-15 15:38:09  pierre
+    * small bug in systems.pas corrected
+    + operators in different units better hanlded
+
+  Revision 1.12  1998/06/15 14:30:12  daniel
 
   * Reverted my changes.
 

+ 19 - 6
compiler/symsym.inc

@@ -489,13 +489,22 @@
 
     procedure tprocsym.deref;
       var t : ttoken;
-
+          last : pprocdef;
       begin
          resolvedef(pdef(definition));
-         for t:=PLUS to last_overloaded do
-           if (overloaded_operators[t]=nil) and
-              (name=overloaded_names[t]) then
-              overloaded_operators[t]:=@self;
+         if (definition^.options and pooperator) <> 0 then
+           begin
+              last:=definition;
+              while assigned(last^.nextoverloaded) do
+                last:=last^.nextoverloaded;
+              for t:=PLUS to last_overloaded do
+              if (name=overloaded_names[t]) then
+                begin
+                   if assigned(overloaded_operators[t]) then
+                     last^.nextoverloaded:=overloaded_operators[t]^.definition;
+                   overloaded_operators[t]:=@self;
+                end;
+           end;
       end;
 
     procedure tprocsym.write;
@@ -1671,7 +1680,11 @@
 
 {
   $Log$
-  Revision 1.12  1998-06-15 14:23:44  daniel
+  Revision 1.13  1998-06-15 15:38:10  pierre
+    * small bug in systems.pas corrected
+    + operators in different units better hanlded
+
+  Revision 1.12  1998/06/15 14:23:44  daniel
 
   * Reverted my changes.
 

+ 6 - 2
compiler/systems.pas

@@ -324,7 +324,7 @@ implementation
 		  )
 		  ,(
 			id     : as_o_aout;
-			idtxt  : 'O';
+			idtxt  : 'O_AOUT';
 			asmbin : 'as';
 			asmcmd : '-D -o $OBJ $ASM';
 			externals : false;
@@ -844,7 +844,11 @@ begin
 end.
 {
   $Log$
-  Revision 1.19  1998-06-15 13:34:24  daniel
+  Revision 1.20  1998-06-15 15:38:14  pierre
+    * small bug in systems.pas corrected
+    + operators in different units better hanlded
+
+  Revision 1.19  1998/06/15 13:34:24  daniel
 
 
   * Fixed spelling mistakes in comments.