mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-11 21:46:00 +02:00
* fixed {$I } with following eof
This commit is contained in:
parent
72c44ae5a0
commit
b94116de16
@ -36,7 +36,7 @@ unit scanner;
|
||||
InputFileBufSize=75;
|
||||
{$else}
|
||||
maxmacrolen=16*1024;
|
||||
InputFileBufSize=32*1024;
|
||||
InputFileBufSize=1024;
|
||||
{$endif}
|
||||
|
||||
id_len = 14;
|
||||
@ -182,10 +182,7 @@ unit scanner;
|
||||
procedure nextfile;
|
||||
procedure addfile(hp:pinputfile);
|
||||
procedure reload;
|
||||
{ function fixbuf:boolean; }
|
||||
procedure setbuf(p:pchar;l:longint);
|
||||
{ function setbufidx(idx:longint):longint;
|
||||
function setlinebreak(idx:longint):longint; }
|
||||
{ Scanner things }
|
||||
procedure gettokenpos;
|
||||
procedure inc_comment_level;
|
||||
@ -402,7 +399,6 @@ implementation
|
||||
{ load block }
|
||||
if not open then
|
||||
Message(scan_f_cannot_open_input);
|
||||
{ status.currentsource:=inputfile^.name^; }
|
||||
reload;
|
||||
end;
|
||||
|
||||
@ -458,8 +454,6 @@ implementation
|
||||
if ioresult<>0 then
|
||||
exit;
|
||||
{ file }
|
||||
|
||||
|
||||
closed:=false;
|
||||
filenotatend:=true;
|
||||
Getmem(inputbuffer,inputbufsize);
|
||||
@ -566,75 +560,47 @@ implementation
|
||||
|
||||
procedure tscannerfile.reload;
|
||||
begin
|
||||
{ still more to read, then we have an illegal char }
|
||||
if (inputpointer-inputbuffer)<bufsize then
|
||||
Message(scan_f_illegal_char);
|
||||
{ safety check }
|
||||
if closed then
|
||||
exit;
|
||||
{ can we read more from this file ? }
|
||||
if filenotatend then
|
||||
begin
|
||||
readbuf;
|
||||
{ fixbuf; }
|
||||
if line_no=0 then
|
||||
line_no:=1;
|
||||
inputpointer:=inputbuffer;
|
||||
end
|
||||
else
|
||||
begin
|
||||
close;
|
||||
{ no next module, than EOF }
|
||||
if not assigned(inputfile^.next) then
|
||||
begin
|
||||
c:=#26;
|
||||
exit;
|
||||
end;
|
||||
{ load next file and reopen it }
|
||||
nextfile;
|
||||
reopen;
|
||||
{ status }
|
||||
{ status.currentsource:=inputfile^.name^; }
|
||||
Comment(V_Debug,'back in '+inputfile^.name^);
|
||||
{ load some current_module fields }
|
||||
current_module^.current_index:=inputfile^.ref_index;
|
||||
end;
|
||||
{ load next char }
|
||||
c:=inputpointer^;
|
||||
inc(longint(inputpointer));
|
||||
end;
|
||||
|
||||
|
||||
{ function tscannerfile.fixbuf:boolean;
|
||||
var
|
||||
i : longint;
|
||||
p : pchar;
|
||||
c : char;
|
||||
begin
|
||||
fixbuf:=false;
|
||||
p:=inputbuffer;
|
||||
i:=0;
|
||||
while i<bufsize do
|
||||
begin
|
||||
c:=p^;
|
||||
case c of
|
||||
#0 : p^:=' ';
|
||||
#10,#13 : begin
|
||||
if (byte(c)+byte(p[1])=23) then
|
||||
begin
|
||||
inc(longint(p));
|
||||
inc(i);
|
||||
end;
|
||||
end;
|
||||
repeat
|
||||
{ still more to read, then we have an illegal char }
|
||||
if (bufsize>0) and (inputpointer-inputbuffer<bufsize) then
|
||||
begin
|
||||
gettokenpos;
|
||||
Message(scan_f_illegal_char);
|
||||
end;
|
||||
inc(i);
|
||||
inc(longint(p));
|
||||
end;
|
||||
if line_no=0 then
|
||||
line_no:=1;
|
||||
fixbuf:=true;
|
||||
|
||||
end; }
|
||||
{ can we read more from this file ? }
|
||||
if filenotatend then
|
||||
begin
|
||||
readbuf;
|
||||
{ fixbuf; }
|
||||
if line_no=0 then
|
||||
line_no:=1;
|
||||
inputpointer:=inputbuffer;
|
||||
end
|
||||
else
|
||||
begin
|
||||
close;
|
||||
{ no next module, than EOF }
|
||||
if not assigned(inputfile^.next) then
|
||||
begin
|
||||
c:=#26;
|
||||
exit;
|
||||
end;
|
||||
{ load next file and reopen it }
|
||||
nextfile;
|
||||
reopen;
|
||||
{ status }
|
||||
Comment(V_Debug,'back in '+inputfile^.name^);
|
||||
{ load some current_module fields }
|
||||
current_module^.current_index:=inputfile^.ref_index;
|
||||
end;
|
||||
{ load next char }
|
||||
c:=inputpointer^;
|
||||
inc(longint(inputpointer));
|
||||
until c<>#0; { if also end, then reload again }
|
||||
end;
|
||||
|
||||
|
||||
procedure tscannerfile.setbuf(p:pchar;l:longint);
|
||||
@ -645,28 +611,14 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
{ function tscannerfile.setbufidx(idx:longint):longint;
|
||||
begin
|
||||
bufidx:=idx;
|
||||
setbufidx:=bufstart+idx;
|
||||
end; }
|
||||
|
||||
|
||||
{ function tscannerfile.setlinebreak(idx:longint):longint;
|
||||
begin
|
||||
inc(line_no);
|
||||
bufidx:=idx;
|
||||
setlinebreak:=bufstart+idx;
|
||||
end; }
|
||||
|
||||
|
||||
procedure tscannerfile.gettokenpos;
|
||||
{ load the values of tokenpos and lasttokenpos }
|
||||
begin
|
||||
lasttokenpos:=bufstart+(inputpointer-inputbuffer);
|
||||
tokenpos.line:=line_no;
|
||||
tokenpos.column:=lasttokenpos-lastlinepos;
|
||||
tokenpos.column:=lasttokenpos-lastlinepos+1;
|
||||
tokenpos.fileindex:=current_module^.current_index;
|
||||
aktfilepos:=tokenpos;
|
||||
end;
|
||||
|
||||
|
||||
@ -1163,12 +1115,12 @@ implementation
|
||||
|
||||
function {$ifdef NEWINPUT}tscannerfile.{$endif}yylex : ttoken;
|
||||
var
|
||||
y : ttoken;
|
||||
code : word;
|
||||
l : longint;
|
||||
mac : pmacrosym;
|
||||
hp : pinputfile;
|
||||
hp2 : pchar;
|
||||
y : ttoken;
|
||||
code : word;
|
||||
l : longint;
|
||||
mac : pmacrosym;
|
||||
hp : pinputfile;
|
||||
macbuf : pchar;
|
||||
asciinr : string[3];
|
||||
label
|
||||
exit_label;
|
||||
@ -1201,11 +1153,8 @@ implementation
|
||||
until false;
|
||||
|
||||
{ Save current token position }
|
||||
{$ifdef NEWINPUT}
|
||||
gettokenpos;
|
||||
aktfilepos:=tokenpos;
|
||||
{$else}
|
||||
gettokenpos;
|
||||
{$ifndef NEWINPUT}
|
||||
lastlinepos:=currlinepos;
|
||||
lasttokenpos:=inputpointer;
|
||||
{$endif}
|
||||
@ -1229,8 +1178,8 @@ implementation
|
||||
{$ifdef NEWINPUT}
|
||||
hp:=new(pinputfile,init('Macro '+pattern));
|
||||
addfile(hp);
|
||||
getmem(hp2,mac^.buflen+1);
|
||||
setbuf(hp2,mac^.buflen+1);
|
||||
getmem(macbuf,mac^.buflen+1);
|
||||
setbuf(macbuf,mac^.buflen+1);
|
||||
{$else}
|
||||
current_module^.current_inputfile^.bufpos:=inputpointer-inputbuffer;
|
||||
hp:=new(pinputfile,init('','Macro '+pattern,''));
|
||||
@ -1244,8 +1193,8 @@ implementation
|
||||
current_module^.sourcefiles.register_file(hp);
|
||||
current_module^.current_index:=hp^.ref_index;
|
||||
{ set an own buffer }
|
||||
getmem(hp2,mac^.buflen+1);
|
||||
current_module^.current_inputfile^.setbuf(hp2,mac^.buflen+1);
|
||||
getmem(macbuf,mac^.buflen+1);
|
||||
current_module^.current_inputfile^.setbuf(macbuf,mac^.buflen+1);
|
||||
inputbuffer:=current_module^.current_inputfile^.buf;
|
||||
{$endif NEWINPUT}
|
||||
{ copy text }
|
||||
@ -1804,7 +1753,10 @@ exit_label:
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.30 1998-07-07 12:32:55 peter
|
||||
Revision 1.31 1998-07-07 17:39:38 peter
|
||||
* fixed {$I } with following eof
|
||||
|
||||
Revision 1.30 1998/07/07 12:32:55 peter
|
||||
* status.currentsource is now calculated in verbose (more accurated)
|
||||
|
||||
Revision 1.29 1998/07/07 11:20:11 peter
|
||||
|
Loading…
Reference in New Issue
Block a user