Forgive me if I’m wrong, but I thought
while are syntactic sugar for
let and conditional
@goto (plus some
iterate calls in the case of
else, etc are syntactic sugar for conditional
For that reason, the rule needs to work post-lowering and be clear on this lower level, as well as imply a sensible high-level rule (at the very least, the rule should be invariant under “partial lowering”, i.e. replacing high-level constructs by their low-level targets). Since the rule should be invariant under rearrangement of basic blocks, the second example follows. Or did I get this wrong?
In principle, your rule is on the control flow graph, not AST (that’s why it is more complicated, and also why it should be accompanied with tools to view the CFG; current tools to view the AST are not helpful anymore to debug scoping issues). So it is not syntactic, but close enough not to matter outside of corner cases.
question what language construct
@labelis I could probably ask in future in another topic.
Goto does what’s written on the label Sorry for the pun. A label labels a position in your code (so it does nothing). Goto goes (jumps) to a position; you need to label the position in order to tell goto where to jump to. This is super useful for e.g. breaking out of nested loops, and imho far cleaner and more readable than pulling along a bool (typical
found) and doing multiple
found && break and a final
if found ... else end. Also, it is the low-level construct that loops are syntactic sugar for.