function ParseContext() {
    var _this = this;

    var orig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
        atLineStart = _ref.atLineStart,
        inCollection = _ref.inCollection,
        inFlow = _ref.inFlow,
        indent = _ref.indent,
        lineStart = _ref.lineStart,
        parent = _ref.parent;

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ParseContext);

    _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(this, "parseNode", function (overlay, start) {
      if (_Node__WEBPACK_IMPORTED_MODULE_10__["default"].atDocumentBoundary(_this.src, start)) return null;
      var context = new ParseContext(_this, overlay);

      var _context$parseProps = context.parseProps(start),
          props = _context$parseProps.props,
          type = _context$parseProps.type,
          valueStart = _context$parseProps.valueStart;

      var node = createNewNode(type, props);
      var offset = node.parse(context, valueStart);
      node.range = new _Range__WEBPACK_IMPORTED_MODULE_14__["default"](start, offset);
      /* istanbul ignore if */

      if (offset <= start) {
        // This should never happen, but if it does, let's make sure to at least
        // step one character forward to avoid a busy loop.
        node.error = new Error("Node#parse consumed no characters");
        node.error.parseEnd = offset;
        node.error.source = node;
        node.range.end = start + 1;
      }

      if (context.nodeStartsCollection(node)) {
        if (!node.error && !context.atLineStart && context.parent.type === _constants__WEBPACK_IMPORTED_MODULE_3__["Type"].DOCUMENT) {
          node.error = new _errors__WEBPACK_IMPORTED_MODULE_4__["YAMLSyntaxError"](node, 'Block collection must not have preceding content here (e.g. directives-end indicator)');
        }

        var collection = new _Collection__WEBPACK_IMPORTED_MODULE_7__["default"](node);
        offset = collection.parse(new ParseContext(context), offset);
        collection.range = new _Range__WEBPACK_IMPORTED_MODULE_14__["default"](start, offset);
        return collection;
      }

      return node;
    });

    this.atLineStart = atLineStart != null ? atLineStart : orig.atLineStart || false;
    this.inCollection = inCollection != null ? inCollection : orig.inCollection || false;
    this.inFlow = inFlow != null ? inFlow : orig.inFlow || false;
    this.indent = indent != null ? indent : orig.indent;
    this.lineStart = lineStart != null ? lineStart : orig.lineStart;
    this.parent = parent != null ? parent : orig.parent || {};
    this.root = orig.root;
    this.src = orig.src;
  }
@param {boolean} atLineStart - Node starts at beginning of line
@param {boolean} inFlow - true if currently in a flow context
@param {boolean} inCollection - true if currently in a collection context
@param {number} indent - Current level of indentation
@param {number} lineStart - Start of the current line
@param {Node} parent - The parent of the node
@param {string} src - Source of the YAML document