Force shortcut boolean evaluation when rewriting length(Windows widestring) = 0.

This commit is contained in:
Rika Ichinose 2024-10-17 02:23:49 +03:00
parent 8e58bbea61
commit bb31f32941

View File

@ -513,6 +513,7 @@ const
{ COM widestrings have 32-bit lengths, and can explicitly have 0 while being non-nil. } { COM widestrings have 32-bit lengths, and can explicitly have 0 while being non-nil. }
if is_widestring(tinlinenode(L).left.resultdef) and (tf_winlikewidestring in target_info.flags) then if is_widestring(tinlinenode(L).left.resultdef) and (tf_winlikewidestring in target_info.flags) then
begin
{ Expand to “(pointer(L.left) = nil) or (PUint32(L.left)[-1] = 0)”. } { Expand to “(pointer(L.left) = nil) or (PUint32(L.left)[-1] = 0)”. }
resn:=caddnode.create_internal(orn, resn:=caddnode.create_internal(orn,
resn, resn,
@ -525,6 +526,8 @@ const
), ),
cordconstnode.create(0,u32inttype,false)) cordconstnode.create(0,u32inttype,false))
); );
include(taddnode(resn).addnodeflags,anf_short_bool);
end;
tinlinenode(L).left:=nil; { Was stolen inside resn, and no longer of interest. } tinlinenode(L).left:=nil; { Was stolen inside resn, and no longer of interest. }
{ resn now checks for Length = 0. For Length <> 0, invert. } { resn now checks for Length = 0. For Length <> 0, invert. }