53 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'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;
 |