unhardcoding macro compilation, step I: introduces MacroCompiler
unhardcoding macro compilation, step II: new starr