Fuzion Logo
fuzion-lang.dev — The Fuzion Language Portal
JavaScript seems to be disabled. Functionality is limited.

Chained Boolean Operators

The idea is to avoid expression such as

if 0 <= i && i < array.length
  say "Index $i is ok!"

by allowing chaining of boolean expressions as follows

if 0 <= i < array.length
  say "Index $i is ok!"

Syntactic Sugar for Chained Boolean Operators

The idea is for any infix operators op1 and op2 in an expression of the form

expr1 op1 expr2 op2 expr3

if expr1 op1 expr2 yields a bool result and infix op2 is not defined for bool but for the type of expr2 to convert this into:

tmp1 := expr1
tmp2 := expr2
(tmp1 op1 tmp2) && (tmp2 op2 expr3)

Longer chains should also be possible.

  a < b < c < d < e < f < g

becomes

{ tmp1 := a; tmp2 := b; tmp1 < tmp2 } &&
{ tmp3 := c; tmp2 < tmp3 } &&
{ tmp4 := d; tmp3 < tmp4 } &&
{ tmp5 := e; tmp4 < tmp5 } &&
{ tmp6 := f; tmp5 < tmp6 } &&
(tmp6 < g)

Syntactic Problems

The syntax of a call with actual generic arguments overlaps with the syntax of expressions

a < b > > c

is ambiguous and could be parsed as a call to a giving the actual generic argument b and comparing the result of this call to c

(a < b >) > c

as well as

a < (b >) > c

which is equivalent to

a.infix <(b.postfix >).infix >(c)

In case an expression can be parsed as a generic argument, it should be interpreted as a generic argument.

Other Languages

Python does something similar. How does this work in detail?