use unique_ptr in AST::Walker