sd-parseq icon indicating copy to clipboard operation
sd-parseq copied to clipboard

Precedence bug with if expressions

Open rewbs opened this issue 2 years ago • 1 comments

if true 10 else 5/2 evaluates as (if true 10 else 5)/2, instead of if true 10 else (5/2) .

rewbs avatar Jul 10 '23 00:07 rewbs

yes! I finally worked this out with an issue i've been having for a while with conditional statements:

the offending statement: if (f-info_match_prev("scene")<4) 0.9 else 0.55 - pulse(p=3b,a=0.075,pw=2) image

the fix: if (f-info_match_prev("scene")<4) 0.9 else (0.55 - pulse(p=3b,a=0.075,pw=2)) image

Easy workaround (enclose your blocks in parentheses).

I think correct behaviour should be that IF you did want a dangling operation at the end (i.e. it applies regardless of truth/falsity), you'd enclose the entire conditional statement in parentheses

e.g. (if (f-info_match_prev("scene")<4) 0.9 else 0.55) - pulse(p=3b,a=0.075,pw=2)

sashaagafonoff avatar Oct 04 '23 12:10 sashaagafonoff