In general keep in mind that the stack-based nature of this visitor is reverse-polish-notation form. I.e. in a sequence of calls to walk or invoke, they'll actually get visited in LIFO order.
function TreeWalker(ast, recv) {
        var self = this;
        this.ast = ast;
        this.recv = recv;
        this.stack =
            [{traverse: ast, parent: undefined, name: undefined},
             {fun: function () {
                 if (self.hasProp(self.recv, 'finished') &&
                     Function === self.recv.finished.constructor) {
                     return self.recv.finished();
                 }
             }}];
        this.current = undefined;
    }