|
|
- 'use strict';
-
- const ErrorReportingMixinBase = require('./mixin-base');
- const ErrorReportingTokenizerMixin = require('./tokenizer-mixin');
- const LocationInfoTokenizerMixin = require('../location-info/tokenizer-mixin');
- const Mixin = require('../../utils/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);
- }
- };
- }
- }
-
- module.exports = ErrorReportingParserMixin;
|