Implement codegen