nit: it'd be cleaner to just modify `walk_call` so that it takes a list of arguments and no self