From 2f3c0bc8bf96ab70c031af16754bbdfff8fef1f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Van=20Canneyt?= Date: Tue, 18 Mar 2025 11:10:10 +0100 Subject: [PATCH] * Use dyn array for input buffer --- compiler/finput.pas | 31 ++++++++++--------------------- compiler/scanner.pas | 36 ++++++++++++++++++------------------ 2 files changed, 28 insertions(+), 39 deletions(-) diff --git a/compiler/finput.pas b/compiler/finput.pas index 0ef54381c7..351489c81e 100644 --- a/compiler/finput.pas +++ b/compiler/finput.pas @@ -41,7 +41,7 @@ interface inc_path : TPathStr; { path if file was included with $I directive } next : tinputfile; { next file for reading } - buf : pchar; { buffer } + buf : TAnsiCharDynArray; { buffer } bufstart, { buffer start position in the file } bufsize, { amount of bytes in the buffer } maxbufsize : longint; { size in memory for the buffer } @@ -277,7 +277,7 @@ uses if closed then exit; inc(bufstart,bufsize); - bufsize:=fileread(buf^,maxbufsize-1); + bufsize:=fileread(buf[0],maxbufsize-1); buf[bufsize]:=#0; endoffile:=fileeof; end; @@ -293,7 +293,7 @@ uses { file } endoffile:=false; closed:=false; - Getmem(buf,MaxBufsize); + SetLength(buf,MaxBufsize); buf[0]:=#0; bufstart:=0; bufsize:=0; @@ -305,11 +305,7 @@ uses begin if is_macro then begin - if assigned(buf) then - begin - Freemem(buf,maxbufsize); - buf:=nil; - end; + buf:=nil; name:=''; path:=''; closed:=true; @@ -321,10 +317,7 @@ uses closed:=true; end; if assigned(buf) then - begin - Freemem(buf,maxbufsize); - buf:=nil; - end; + buf:=nil; bufstart:=0; end; @@ -336,11 +329,7 @@ uses if not closed then begin fileclose; - if assigned(buf) then - begin - Freemem(buf,maxbufsize); - buf:=nil; - end; + buf:=nil; closed:=true; end; end; @@ -366,7 +355,7 @@ uses exit; closed:=false; { get new mem } - Getmem(buf,maxbufsize); + SetLength(buf,maxbufsize); { restore state } fileseek(BufStart); bufsize:=0; @@ -378,8 +367,8 @@ uses procedure tinputfile.setmacro(p:pchar;len:longint); begin { create new buffer } - getmem(buf,len+1); - move(p^,buf^,len); + SetLength(buf,len+1); + move(p^,buf[0],len); buf[len]:=#0; { reset } bufstart:=0; @@ -439,7 +428,7 @@ uses if endoffile then break; readbuf; - p:=buf; + p:=@buf[0]; c:=p^; end; if c in [#10,#13] then diff --git a/compiler/scanner.pas b/compiler/scanner.pas index 67f214fdc3..0793c65de0 100644 --- a/compiler/scanner.pas +++ b/compiler/scanner.pas @@ -3097,11 +3097,11 @@ type openinputfile:=inputfile.open; { load buffer } {$ifdef CHECK_INPUTPOINTER_LIMITS} - hidden_inputbuffer:=inputfile.buf; - hidden_inputpointer:=inputfile.buf; + hidden_inputbuffer:=PAnsiChar(inputfile.buf); + hidden_inputpointer:=PAnsiChar(inputfile.buf); {$else not CHECK_INPUTPOINTER_LIMITS} - inputbuffer:=inputfile.buf; - inputpointer:=inputfile.buf; + inputbuffer:=PAnsiChar(inputfile.buf); + inputpointer:=PAnsiChar(inputfile.buf); {$endif CHECK_INPUTPOINTER_LIMITS} inputstart:=inputfile.bufstart; { line } @@ -3140,11 +3140,11 @@ type tempopeninputfile:=inputfile.tempopen; { reload buffer } {$ifdef CHECK_INPUTPOINTER_LIMITS} - hidden_inputbuffer:=inputfile.buf; - hidden_inputpointer:=inputfile.buf; + hidden_inputbuffer:=PAnsiChar(inputfile.buf); + hidden_inputpointer:=PAnsiChar(inputfile.buf); {$else not CHECK_INPUTPOINTER_LIMITS} - inputbuffer:=inputfile.buf; - inputpointer:=inputfile.buf; + inputbuffer:=PAnsiChar(inputfile.buf); + inputpointer:=PAnsiChar(inputfile.buf); {$endif CHECK_INPUTPOINTER_LIMITS} inputstart:=inputfile.bufstart; end; @@ -3187,10 +3187,10 @@ type procedure tscannerfile.restoreinputfile; begin {$ifdef check_inputpointer_limits} - hidden_inputbuffer:=inputfile.buf; + hidden_inputbuffer:=PAnsiChar(inputfile.buf); hidden_inputpointer:=inputfile.saveinputpointer; {$else not check_inputpointer_limits} - inputbuffer:=inputfile.buf; + inputbuffer:=PAnsiChar(inputfile.buf); inputpointer:=inputfile.saveinputpointer; {$endif check_inputpointer_limits} lastlinepos:=inputfile.savelastlinepos; @@ -3980,11 +3980,11 @@ type begin readbuf; {$ifdef CHECK_INPUTPOINTER_LIMITS} - hidden_inputpointer:=buf; - hidden_inputbuffer:=buf; + hidden_inputpointer:=PAnsiChar(buf); + hidden_inputbuffer:=PAnsiChar(buf); {$else not CHECK_INPUTPOINTER_LIMITS} - inputpointer:=buf; - inputbuffer:=buf; + inputpointer:=PAnsiChar(buf); + inputbuffer:=PAnsiChar(buf); {$endif CHECK_INPUTPOINTER_LIMITS} inputstart:=bufstart; { first line? } @@ -4096,11 +4096,11 @@ type setmacro(p,len); { local buffer } {$ifdef CHECK_INPUTPOINTER_LIMITS} - hidden_inputbuffer:=buf; - hidden_inputpointer:=buf; + hidden_inputbuffer:=PAnsiChar(buf); + hidden_inputpointer:=PAnsiChar(buf); {$else not CHECK_INPUTPOINTER_LIMITS} - inputbuffer:=buf; - inputpointer:=buf; + inputbuffer:=PAnsiChar(buf); + inputpointer:=PAnsiChar(buf); {$endif CHECK_INPUTPOINTER_LIMITS} inputstart:=bufstart; ref_index:=fileindex;