; ; Basic if expressions. ; if true "hello" ; ; These can produce values and the result bound to a name. ; let a = if (2 + 2 >= 4) 42 ; ; We support a single if expression. ; let b = if 0xff == 255 "hello" else "world" ; ; ... but these can compound on each other ; if 1 < 2 6 ; else if 1 > 2 7 ; else 8 ; ; A block is an expression, and if raise the scope level regardless if a block ; ; is used or not. ; if true != false { ; let a = "yo" ; } ; ; Match cases should only apply to literal values, for example `case 1 + 2` ; ; isn't allowed. They should generally convert to a lookup table. ; match a = { ; case 8 = "hello" ; case 9 = "world" ; else = "what" ; } ; cond { ; case a == b = "hello" ; case a != c = "world" ; else = "what" ; } ; Enums are integers with values that increase automatically or that can be set ; with a constexpr. enum flags { node_add = 1 << 0 node_sub = 1 << 1 node_div = 1 << 2 node_mul } let a:flags = flags.node_add ; No need to qualify enum fields inside match-case. match a = { case node_add = "adding something..." case node_add = "subbing something..." else = "default case" }