* fixed {$I } with following eof

This commit is contained in:
peter 1998-07-07 17:39:38 +00:00
parent 72c44ae5a0
commit b94116de16

View File

@ -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