'as' / 'as?' codegen