compiler: read and write full token size instead of 1 byte because TToken has more than 255 elements now

git-svn-id: trunk@16642 -
This commit is contained in:
paul 2010-12-26 15:15:20 +00:00
parent fb2c465f22
commit 77fa5b7fb9

View File

@ -2045,18 +2045,20 @@ In case not, the value returned can be arbitrary.
procedure tscannerfile.recordtoken; procedure tscannerfile.recordtoken;
var var
a : array[0..1] of byte; t : ttoken;
s : tspecialgenerictoken;
len : sizeint; len : sizeint;
begin begin
if not assigned(recordtokenbuf) then if not assigned(recordtokenbuf) then
internalerror(200511176); internalerror(200511176);
t:=_GENERICSPECIALTOKEN;
{ settings changed? } { settings changed? }
if CompareByte(current_settings,last_settings,sizeof(current_settings))<>0 then if CompareByte(current_settings,last_settings,sizeof(current_settings))<>0 then
begin begin
{ use a special token to record it } { use a special token to record it }
a[0]:=byte(_GENERICSPECIALTOKEN); s:=ST_LOADSETTINGS;
a[1]:=byte(ST_LOADSETTINGS); recordtokenbuf.write(t,SizeOf(t));
recordtokenbuf.write(a,2); recordtokenbuf.write(s,1);
recordtokenbuf.write(current_settings,sizeof(current_settings)); recordtokenbuf.write(current_settings,sizeof(current_settings));
last_settings:=current_settings; last_settings:=current_settings;
end; end;
@ -2064,32 +2066,32 @@ In case not, the value returned can be arbitrary.
{ file pos changes? } { file pos changes? }
if current_tokenpos.line<>last_filepos.line then if current_tokenpos.line<>last_filepos.line then
begin begin
a[0]:=byte(_GENERICSPECIALTOKEN); s:=ST_LINE;
a[1]:=byte(ST_LINE); recordtokenbuf.write(t,SizeOf(t));
recordtokenbuf.write(a,2); recordtokenbuf.write(s,1);
recordtokenbuf.write(current_tokenpos.line,sizeof(current_tokenpos.line)); recordtokenbuf.write(current_tokenpos.line,sizeof(current_tokenpos.line));
last_filepos.line:=current_tokenpos.line; last_filepos.line:=current_tokenpos.line;
end; end;
if current_tokenpos.column<>last_filepos.column then if current_tokenpos.column<>last_filepos.column then
begin begin
a[0]:=byte(_GENERICSPECIALTOKEN); s:=ST_COLUMN;
a[1]:=byte(ST_COLUMN); recordtokenbuf.write(t,SizeOf(t));
recordtokenbuf.write(a,2); recordtokenbuf.write(s,1);
recordtokenbuf.write(current_tokenpos.column,sizeof(current_tokenpos.column)); recordtokenbuf.write(current_tokenpos.column,sizeof(current_tokenpos.column));
last_filepos.column:=current_tokenpos.column; last_filepos.column:=current_tokenpos.column;
end; end;
if current_tokenpos.fileindex<>last_filepos.fileindex then if current_tokenpos.fileindex<>last_filepos.fileindex then
begin begin
a[0]:=byte(_GENERICSPECIALTOKEN); s:=ST_FILEINDEX;
a[1]:=byte(ST_FILEINDEX); recordtokenbuf.write(t,SizeOf(t));
recordtokenbuf.write(a,2); recordtokenbuf.write(s,1);
recordtokenbuf.write(current_tokenpos.fileindex,sizeof(current_tokenpos.fileindex)); recordtokenbuf.write(current_tokenpos.fileindex,sizeof(current_tokenpos.fileindex));
last_filepos.fileindex:=current_tokenpos.fileindex; last_filepos.fileindex:=current_tokenpos.fileindex;
end; end;
recordtokenbuf.write(token,1); recordtokenbuf.write(token,SizeOf(token));
if token=_ID then if token=_ID then
recordtokenbuf.write(idtoken,1); recordtokenbuf.write(idtoken,SizeOf(idtoken));
case token of case token of
_CWCHAR, _CWCHAR,
_CWSTRING : _CWSTRING :
@ -2168,9 +2170,9 @@ In case not, the value returned can be arbitrary.
end; end;
repeat repeat
{ load token from the buffer } { load token from the buffer }
replaytokenbuf.read(token,1); replaytokenbuf.read(token,SizeOf(token));
if token=_ID then if token=_ID then
replaytokenbuf.read(idtoken,1) replaytokenbuf.read(idtoken,SizeOf(idtoken))
else else
idtoken:=_NOID; idtoken:=_NOID;
case token of case token of