eval(vals) {
    if (!vals) return nodes.null;
    var len = vals.length
      , node = nodes.null;

    try {
      for (var i = 0; i < len; ++i) {
        node = vals[i];
        switch (node.nodeName) {
          case 'if':
            if ('block' != node.block.nodeName) {
              node = this.visit(node);
              break;
            }
          case 'each':
          case 'block':
            node = this.visit(node);
            if (node.nodes) node = this.eval(node.nodes);
            break;
          default:
            node = this.visit(node);
        }
      }
    } catch (err) {
      if ('return' == err.nodeName) {
        return err.expr;
      } else {
        throw err;
      }
    }

    return node;
  }
Evaluate the given `vals`.

@param {Array} vals
@return {Node}
@api private