compiler refactoring