Another refactor: split the AST into pre-AST (the one where all statements are linearized and independent, and only know their indentation) and the actual hierarchical AST. Removing stupid code feels good, should've done that long time ago!
@lisyarus That's a tension I met when creating language projects as well. Making more IR formats/passes feels wasteful (and also takes a lot of effort), but it simplifies so many problems down the road