diff options
Diffstat (limited to 'riscv_new/compiler/nutils.pas')
-rw-r--r-- | riscv_new/compiler/nutils.pas | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/riscv_new/compiler/nutils.pas b/riscv_new/compiler/nutils.pas index fa91b3bee4..c276217800 100644 --- a/riscv_new/compiler/nutils.pas +++ b/riscv_new/compiler/nutils.pas @@ -161,6 +161,10 @@ interface { include or exclude cs from p.localswitches } procedure node_change_local_switch(p : tnode;cs : tlocalswitch;enable : boolean); + { returns true, if p is a node which shall be short boolean evaluated, + if it is not an orn/andn with boolean operans, the result is undefined } + function doshortbooleval(p : tnode) : Boolean; + implementation uses @@ -1459,7 +1463,8 @@ implementation exclude(p.localswitches, plocalswitchchange(plsc)^.cs); result:=fen_true; end; - + + procedure node_change_local_switch(p : tnode;cs : tlocalswitch;enable : boolean); var lsc : tlocalswitchchange; @@ -1469,4 +1474,10 @@ implementation foreachnodestatic(p,@do_change_local_settings,@lsc); end; + + function doshortbooleval(p : tnode) : Boolean; + begin + Result:=(p.nodetype in [orn,andn]) and ((nf_short_bool in taddnode(p).flags) or not(cs_full_boolean_eval in p.localswitches)); + end; + end. |