You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.7 KiB
52 lines
1.7 KiB
'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;
|
|
|