code: 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;
      }
docs: 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.