compiler: support more constructs