gen: change o_nogen()/o_dogen() to be recursive