From 7b2b51e6f36b8a9d7074266c2dd1d894e6834b00 Mon Sep 17 00:00:00 2001 From: florian Date: Mon, 18 Aug 2025 22:56:19 +0200 Subject: [PATCH] * fix and simplify twhilerepeatnode.internalsimplify --- compiler/nflw.pas | 6 +++--- compiler/nutils.pas | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/compiler/nflw.pas b/compiler/nflw.pas index 1b1f6b52bc..c9b6959447 100644 --- a/compiler/nflw.pas +++ b/compiler/nflw.pas @@ -1363,9 +1363,9 @@ implementation (tordconstnode(taddnode(left).right).value=0)) then begin p:=GetLastStatement(right); - if assigned(p) and (tstatementnode(p).left.nodetype=inlinen) and (tinlinenode(tstatementnode(p).left).inlinenumber=in_dec_x) and - taddnode(left).left.isequal(tcallparanode(tinlinenode(tstatementnode(p).left).left).left) and - not(assigned(tcallparanode(tinlinenode(tstatementnode(p).left).left).right)) then + if assigned(p) and (p.nodetype=inlinen) and (tinlinenode(p).inlinenumber=in_dec_x) and + taddnode(left).left.isequal(tcallparanode(tinlinenode(p).left).left) and + not(assigned(tcallparanode(tinlinenode(p).left).right)) then begin result:=cifnode.create_internal(left.getcopy,getcopy,nil); include(twhilerepeatnode(tifnode(result).right).loopflags,lnf_checknegate); diff --git a/compiler/nutils.pas b/compiler/nutils.pas index bbf3373d64..6052c4d025 100644 --- a/compiler/nutils.pas +++ b/compiler/nutils.pas @@ -1674,12 +1674,20 @@ implementation Result:=p; while assigned(Result) do begin - if (Result.nodetype=statementn) and assigned(tstatementnode(Result).next) then - Result:=tstatementnode(Result).next + if Result.nodetype=statementn then + begin + if assigned(tstatementnode(Result).next) then + Result:=tstatementnode(Result).next + else if tstatementnode(Result).statement.nodetype=blockn then + Result:=tblocknode(tstatementnode(Result).left).statements + else + begin + Result:=tstatementnode(Result).statement; + exit; + end; + end else if Result.nodetype=blockn then Result:=tblocknode(Result).statements - else if (Result.nodetype=statementn) and (tstatementnode(Result).statement.nodetype=blockn) then - Result:=tblocknode(tstatementnode(Result).left).statements else exit; end;