code: function equal(a, b, diff) {
    diff = diff || {};
    if (a.type !== b.type) {
      return equalDiff(a, b, diff);
    }
    if (a.value !== b.value) {
      return equalDiff(a, b, diff);
    }
    if (isValueNode(a) !== isValueNode(b)) {
      return equalDiff(a, b, diff);
    }
    if (!isValueNode(a)) {
      if (a.nodes.length !== b.nodes.length) {
        return equalDiff(a, b, diff);
      }
      for (var i = 0; i < b.nodes.length; i++) {
        if (!equal(a.nodes[i], b.nodes[i], diff)) {
          return false;
        }
      }
    }
    return true;
  }
docs: /*
  Tests two AST nodes for equality.
  @param {AstNode} a Example node.
  @param {AstNode} b Node that should match a's properties.