Unfortunately there isn't a proper dynamically scoped replacement, so we have to resort to using funcall.