Browse Source

* write source line again for inline procs

pierre 25 years ago
parent
commit
4a5e85e38d
1 changed files with 15 additions and 6 deletions
  1. 15 6
      compiler/ag386att.pas

+ 15 - 6
compiler/ag386att.pas

@@ -367,6 +367,7 @@ unit ag386att;
       s        : string;
       found    : boolean;
       i,pos,l  : longint;
+      InlineLevel : longint;
       co       : comp;
       sin      : single;
       d        : double;
@@ -378,6 +379,7 @@ unit ag386att;
     begin
       if not assigned(p) then
        exit;
+      InlineLevel:=0;
       { lineinfo is only needed for codesegment (PFV) }
       do_line:=(cs_asm_source in aktglobalswitches) or
                ((cs_lineinfo in aktmoduleswitches) and (p=codesegment));
@@ -422,15 +424,16 @@ unit ag386att;
                          lastinfile^.close;
                      end;
                    if (hp^.fileinfo.line<>lastfileinfo.line) and
-                      (hp^.fileinfo.line<infile^.maxlinebuf) then
+                      ((hp^.fileinfo.line<infile^.maxlinebuf) or (InlineLevel>0)) then
                      begin
                        if (hp^.fileinfo.line<>0) and
-                          (infile^.linebuf^[hp^.fileinfo.line]>=0) then
+                          ((infile^.linebuf^[hp^.fileinfo.line]>=0) or (InlineLevel>0)) then
                          AsmWriteLn(target_asm.comment+'['+tostr(hp^.fileinfo.line)+'] '+
                            fixline(infile^.GetLineStr(hp^.fileinfo.line)));
                        { set it to a negative value !
                        to make that is has been read already !! PM }
-                       infile^.linebuf^[hp^.fileinfo.line]:=-infile^.linebuf^[hp^.fileinfo.line]-1;
+                       if (infile^.linebuf^[hp^.fileinfo.line]>=0) then
+                         infile^.linebuf^[hp^.fileinfo.line]:=-infile^.linebuf^[hp^.fileinfo.line]-1;
                      end;
                  end;
 {$ifdef LINEINFO}
@@ -801,7 +804,10 @@ unit ag386att;
              end;
 
            ait_marker :
-             ;
+             if pai_marker(hp)^.kind=InlineStart then
+               inc(InlineLevel)
+             else if pai_marker(hp)^.kind=InlineEnd then
+               dec(InlineLevel);
 
            else
              internalerror(10000);
@@ -888,7 +894,10 @@ unit ag386att;
 end.
 {
   $Log$
-  Revision 1.29  2000-02-20 21:20:28  marco
+  Revision 1.30  2000-02-29 23:56:49  pierre
+   * write source line again for inline procs
+
+  Revision 1.29  2000/02/20 21:20:28  marco
    * Put some call under Ifdef GDB, so that compiling without -dGDB works
 
   Revision 1.28  2000/02/18 21:54:07  pierre
@@ -969,4 +978,4 @@ end.
   Revision 1.6  1999/07/29 20:53:56  peter
     * write .size also
 
-}
+}