pub fn generate(program: &Program) -> TokenStream