refactor CSourceGenerator