mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 06:29:30 +02:00
* directly copy the result of set <op> set into the left side of an assignment
git-svn-id: trunk@47226 -
This commit is contained in:
parent
eb4bc9d153
commit
13f1fb60b4
@ -3271,6 +3271,28 @@ implementation
|
||||
var
|
||||
newstatement : tstatementnode;
|
||||
temp : ttempcreatenode;
|
||||
begin
|
||||
{ directly load the result set into the assignee if possible }
|
||||
if assigned(aktassignmentnode) and
|
||||
(aktassignmentnode.right=self) and
|
||||
(aktassignmentnode.left.resultdef=resultdef) and
|
||||
valid_for_var(aktassignmentnode.left,false) then
|
||||
begin
|
||||
result:=ccallnode.createintern(n,
|
||||
ccallparanode.create(cordconstnode.create(resultdef.size,sinttype,false),
|
||||
ccallparanode.create(aktassignmentnode.left.getcopy,
|
||||
ccallparanode.create(right,
|
||||
ccallparanode.create(left,nil))))
|
||||
);
|
||||
|
||||
{ remove reused parts from original node }
|
||||
left:=nil;
|
||||
right:=nil;
|
||||
|
||||
include(aktassignmentnode.flags,nf_assign_done_in_right);
|
||||
firstpass(result);
|
||||
end
|
||||
else
|
||||
begin
|
||||
{ add two var sets }
|
||||
result:=internalstatements(newstatement);
|
||||
@ -3296,6 +3318,7 @@ implementation
|
||||
addstatement(newstatement,ctempdeletenode.create_normal_temp(temp));
|
||||
addstatement(newstatement,ctemprefnode.create(temp));
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
procname: string[31];
|
||||
|
Loading…
Reference in New Issue
Block a user