import { getDefaultExportFromCjs } from '../../../../../../../../_virtual/_commonjsHelpers.mjs';
import '../../../../../../../../_virtual/mixin-base.mjs';
import '../../../../../../../../_virtual/tokenizer-mixin2.mjs';
import '../../../../../../../../_virtual/tokenizer-mixin.mjs';
import '../../../../../../../../_virtual/mixin.mjs';
import { m as mixinBase } from './mixin-base.mjs';
import { t as tokenizerMixin } from './tokenizer-mixin.mjs';
import { t as tokenizerMixin$1 } from '../location-info/tokenizer-mixin.mjs';
import { m as mixin } from '../../utils/mixin.mjs';

'use strict';

const ErrorReportingMixinBase = mixinBase;
const ErrorReportingTokenizerMixin = tokenizerMixin;
const LocationInfoTokenizerMixin = tokenizerMixin$1;
const Mixin = mixin;

class ErrorReportingParserMixin extends ErrorReportingMixinBase {
    constructor(parser, opts) {
        super(parser, opts);

        this.opts = opts;
        this.ctLoc = null;
        this.locBeforeToken = false;
    }

    _setErrorLocation(err) {
        if (this.ctLoc) {
            err.startLine = this.ctLoc.startLine;
            err.startCol = this.ctLoc.startCol;
            err.startOffset = this.ctLoc.startOffset;

            err.endLine = this.locBeforeToken ? this.ctLoc.startLine : this.ctLoc.endLine;
            err.endCol = this.locBeforeToken ? this.ctLoc.startCol : this.ctLoc.endCol;
            err.endOffset = this.locBeforeToken ? this.ctLoc.startOffset : this.ctLoc.endOffset;
        }
    }

    _getOverriddenMethods(mxn, orig) {
        return {
            _bootstrap(document, fragmentContext) {
                orig._bootstrap.call(this, document, fragmentContext);

                Mixin.install(this.tokenizer, ErrorReportingTokenizerMixin, mxn.opts);
                Mixin.install(this.tokenizer, LocationInfoTokenizerMixin);
            },

            _processInputToken(token) {
                mxn.ctLoc = token.location;

                orig._processInputToken.call(this, token);
            },

            _err(code, options) {
                mxn.locBeforeToken = options && options.beforeToken;
                mxn._reportError(code);
            }
        };
    }
}

var parserMixin = ErrorReportingParserMixin;

var parserMixin_default = /*@__PURE__*/getDefaultExportFromCjs(parserMixin);

export { parserMixin_default as default, parserMixin as p };
//# sourceMappingURL=parser-mixin.mjs.map
