code: function varItem(node, valueNode) {
    var type;
    var properties = {};
    if (typeof valueNode === 'string') {
      return node.item('var.' + valueNode);
    }
    if (valueNode.type === 'object') {
      type = 'object';
      _(valueNode.nodes).each(function (prop) {
        var name = prop.nodes[0].value;
        var item = varItem(prop, prop.nodes[1]);
        if (item) {
          properties[name] = item;
        }
      });
    } else if (valueNode.type === 'function' ||
               valueNode.type === 'define-function') {
      type = 'function';
    } else if (valueNode.type === 'new') {
      type = 'object';
      var className = valueNode.nodes[0].value;
      if (node.item('classes')[className]) {
        var classVar = node.item('var.' + className);
        var classPrototype = classVar.properties.prototype;
        if (classPrototype) {
          _(classPrototype.properties).each(function (method, key) {
            var item = varItem(method.node, method.value);
            if (item) {
              properties[key] = item;
            }
          });
        }
      }
    } else {
      return findVarItem(valueNode);
    }
    return {
      node: node,
      value: valueNode,
      type: type,
      properties: properties
    };
  }
docs: /*
  Creates an object to represent a variable value.
  @param node {AstNode} Node holding the variable scope.
  @param valueNode {AstNode} Node holding the value.