mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-30 05:39:55 +02:00
scanner unit:
treplaystack class: added change_endian boolean field treplaystack.create added achange_endian parameter tscannerfile class: added tokenbuf_change_endian boolean field readsizeint method: use tokenbuf_change_endian to maybe swap sizeint startreplaytokens method: added achange_endian field psub and ptype units: adapt to tscannerfile.startreplaytokens change above. git-svn-id: trunk@19012 -
This commit is contained in:
parent
9073beffec
commit
57f3f0a82b
@ -2051,7 +2051,8 @@ implementation
|
|||||||
{ use the index the module got from the current compilation process }
|
{ use the index the module got from the current compilation process }
|
||||||
current_filepos.moduleindex:=hmodule.unit_index;
|
current_filepos.moduleindex:=hmodule.unit_index;
|
||||||
current_tokenpos:=current_filepos;
|
current_tokenpos:=current_filepos;
|
||||||
current_scanner.startreplaytokens(tprocdef(tprocdef(hp).genericdef).generictokenbuf);
|
current_scanner.startreplaytokens(tprocdef(tprocdef(hp).genericdef).generictokenbuf,
|
||||||
|
tprocdef(tprocdef(hp).genericdef).change_endian);
|
||||||
read_proc_body(nil,tprocdef(hp));
|
read_proc_body(nil,tprocdef(hp));
|
||||||
current_filepos:=oldcurrent_filepos;
|
current_filepos:=oldcurrent_filepos;
|
||||||
end
|
end
|
||||||
|
@ -340,7 +340,8 @@ implementation
|
|||||||
|
|
||||||
if not assigned(genericdef.generictokenbuf) then
|
if not assigned(genericdef.generictokenbuf) then
|
||||||
internalerror(200511171);
|
internalerror(200511171);
|
||||||
current_scanner.startreplaytokens(genericdef.generictokenbuf);
|
current_scanner.startreplaytokens(genericdef.generictokenbuf,
|
||||||
|
genericdef.change_endian);
|
||||||
read_named_type(tt,specializename,genericdef,generictypelist,false);
|
read_named_type(tt,specializename,genericdef,generictypelist,false);
|
||||||
ttypesym(srsym).typedef:=tt;
|
ttypesym(srsym).typedef:=tt;
|
||||||
tt.typesym:=srsym;
|
tt.typesym:=srsym;
|
||||||
|
@ -71,7 +71,9 @@ interface
|
|||||||
settings : tsettings;
|
settings : tsettings;
|
||||||
tokenbuf : tdynamicarray;
|
tokenbuf : tdynamicarray;
|
||||||
next : treplaystack;
|
next : treplaystack;
|
||||||
constructor Create(atoken: ttoken;asettings:tsettings;atokenbuf:tdynamicarray;anext:treplaystack);
|
change_endian : boolean;
|
||||||
|
constructor Create(atoken: ttoken;asettings:tsettings;
|
||||||
|
atokenbuf:tdynamicarray;anext:treplaystack; achange_endian : boolean);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
tcompile_time_predicate = function(var valuedescr: String) : Boolean;
|
tcompile_time_predicate = function(var valuedescr: String) : Boolean;
|
||||||
@ -117,6 +119,7 @@ interface
|
|||||||
|
|
||||||
replaytokenbuf,
|
replaytokenbuf,
|
||||||
recordtokenbuf : tdynamicarray;
|
recordtokenbuf : tdynamicarray;
|
||||||
|
tokenbuf_change_endian : boolean;
|
||||||
|
|
||||||
{ last settings we stored }
|
{ last settings we stored }
|
||||||
last_settings : tsettings;
|
last_settings : tsettings;
|
||||||
@ -170,7 +173,7 @@ interface
|
|||||||
procedure startrecordtokens(buf:tdynamicarray);
|
procedure startrecordtokens(buf:tdynamicarray);
|
||||||
procedure stoprecordtokens;
|
procedure stoprecordtokens;
|
||||||
procedure replaytoken;
|
procedure replaytoken;
|
||||||
procedure startreplaytokens(buf:tdynamicarray);
|
procedure startreplaytokens(buf:tdynamicarray; achange_endian : boolean);
|
||||||
procedure writesizeint(val : sizeint);
|
procedure writesizeint(val : sizeint);
|
||||||
function readsizeint : sizeint;
|
function readsizeint : sizeint;
|
||||||
procedure readchar;
|
procedure readchar;
|
||||||
@ -1863,11 +1866,13 @@ In case not, the value returned can be arbitrary.
|
|||||||
{*****************************************************************************
|
{*****************************************************************************
|
||||||
TReplayStack
|
TReplayStack
|
||||||
*****************************************************************************}
|
*****************************************************************************}
|
||||||
constructor treplaystack.Create(atoken:ttoken;asettings:tsettings;atokenbuf:tdynamicarray;anext:treplaystack);
|
constructor treplaystack.Create(atoken:ttoken;asettings:tsettings;
|
||||||
|
atokenbuf:tdynamicarray;anext:treplaystack;achange_endian : boolean);
|
||||||
begin
|
begin
|
||||||
token:=atoken;
|
token:=atoken;
|
||||||
settings:=asettings;
|
settings:=asettings;
|
||||||
tokenbuf:=atokenbuf;
|
tokenbuf:=atokenbuf;
|
||||||
|
change_endian:=achange_endian;
|
||||||
next:=anext;
|
next:=anext;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1907,6 +1912,7 @@ In case not, the value returned can be arbitrary.
|
|||||||
{ reset scanner }
|
{ reset scanner }
|
||||||
preprocstack:=nil;
|
preprocstack:=nil;
|
||||||
replaystack:=nil;
|
replaystack:=nil;
|
||||||
|
tokenbuf_change_endian:=false;
|
||||||
comment_level:=0;
|
comment_level:=0;
|
||||||
yylexcount:=0;
|
yylexcount:=0;
|
||||||
block_type:=bt_general;
|
block_type:=bt_general;
|
||||||
@ -2083,8 +2089,6 @@ In case not, the value returned can be arbitrary.
|
|||||||
|
|
||||||
procedure tscannerfile.writesizeint(val : sizeint);
|
procedure tscannerfile.writesizeint(val : sizeint);
|
||||||
begin
|
begin
|
||||||
if target_info.endian <> source_info.endian then
|
|
||||||
val:=swapendian(val);
|
|
||||||
recordtokenbuf.write(val,sizeof(sizeint));
|
recordtokenbuf.write(val,sizeof(sizeint));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -2093,7 +2097,7 @@ In case not, the value returned can be arbitrary.
|
|||||||
val : sizeint;
|
val : sizeint;
|
||||||
begin
|
begin
|
||||||
replaytokenbuf.read(val,sizeof(sizeint));
|
replaytokenbuf.read(val,sizeof(sizeint));
|
||||||
if target_info.endian <> source_info.endian then
|
if tokenbuf_change_endian then
|
||||||
val:=swapendian(val);
|
val:=swapendian(val);
|
||||||
result:=val;
|
result:=val;
|
||||||
end;
|
end;
|
||||||
@ -2225,18 +2229,20 @@ In case not, the value returned can be arbitrary.
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure tscannerfile.startreplaytokens(buf:tdynamicarray);
|
procedure tscannerfile.startreplaytokens(buf:tdynamicarray; achange_endian : boolean);
|
||||||
begin
|
begin
|
||||||
if not assigned(buf) then
|
if not assigned(buf) then
|
||||||
internalerror(200511175);
|
internalerror(200511175);
|
||||||
{ save current token }
|
{ save current token }
|
||||||
if token in [_CWCHAR,_CWSTRING,_CCHAR,_CSTRING,_INTCONST,_REALNUMBER,_ID] then
|
if token in [_CWCHAR,_CWSTRING,_CCHAR,_CSTRING,_INTCONST,_REALNUMBER,_ID] then
|
||||||
internalerror(200511178);
|
internalerror(200511178);
|
||||||
replaystack:=treplaystack.create(token,current_settings,replaytokenbuf,replaystack);
|
replaystack:=treplaystack.create(token,current_settings,
|
||||||
|
replaytokenbuf,replaystack,tokenbuf_change_endian);
|
||||||
if assigned(inputpointer) then
|
if assigned(inputpointer) then
|
||||||
dec(inputpointer);
|
dec(inputpointer);
|
||||||
{ install buffer }
|
{ install buffer }
|
||||||
replaytokenbuf:=buf;
|
replaytokenbuf:=buf;
|
||||||
|
tokenbuf_change_endian:=achange_endian;
|
||||||
|
|
||||||
{ reload next token }
|
{ reload next token }
|
||||||
replaytokenbuf.seek(0);
|
replaytokenbuf.seek(0);
|
||||||
@ -2779,6 +2785,10 @@ In case not, the value returned can be arbitrary.
|
|||||||
hp:=replaystack.next;
|
hp:=replaystack.next;
|
||||||
replaystack.free;
|
replaystack.free;
|
||||||
replaystack:=hp;
|
replaystack:=hp;
|
||||||
|
if assigned (replaystack) then
|
||||||
|
tokenbuf_change_endian:=replaystack.change_endian
|
||||||
|
else
|
||||||
|
tokenbuf_change_endian:=false;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user