finish evaluate_impl