Rebuild src/parser.js (forgotten in the previous commit)
This commit is contained in:
parent
28860e88df
commit
4e46a6e46e
|
@ -61,6 +61,8 @@ module.exports = (function(){
|
||||||
|
|
||||||
var pos = 0;
|
var pos = 0;
|
||||||
var reportedPos = 0;
|
var reportedPos = 0;
|
||||||
|
var cachedReportedPos = 0;
|
||||||
|
var cachedReportedPosDetails = { line: 1, column: 1, seenCR: false };
|
||||||
var reportFailures = 0;
|
var reportFailures = 0;
|
||||||
var rightmostFailuresPos = 0;
|
var rightmostFailuresPos = 0;
|
||||||
var rightmostFailuresExpected = [];
|
var rightmostFailuresExpected = [];
|
||||||
|
@ -92,16 +94,48 @@ module.exports = (function(){
|
||||||
return '\\' + escapeChar + padLeft(charCode.toString(16).toUpperCase(), '0', length);
|
return '\\' + escapeChar + padLeft(charCode.toString(16).toUpperCase(), '0', length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function computeReportedPosDetails() {
|
||||||
|
function advanceCachedReportedPos() {
|
||||||
|
var ch;
|
||||||
|
|
||||||
|
for (; cachedReportedPos < reportedPos; cachedReportedPos++) {
|
||||||
|
ch = input.charAt(cachedReportedPos);
|
||||||
|
if (ch === "\n") {
|
||||||
|
if (!cachedReportedPosDetails.seenCR) { cachedReportedPosDetails.line++; }
|
||||||
|
cachedReportedPosDetails.column = 1;
|
||||||
|
cachedReportedPosDetails.seenCR = false;
|
||||||
|
} else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") {
|
||||||
|
cachedReportedPosDetails.line++;
|
||||||
|
cachedReportedPosDetails.column = 1;
|
||||||
|
cachedReportedPosDetails.seenCR = true;
|
||||||
|
} else {
|
||||||
|
cachedReportedPosDetails.column++;
|
||||||
|
cachedReportedPosDetails.seenCR = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cachedReportedPos !== reportedPos) {
|
||||||
|
if (cachedReportedPos > reportedPos) {
|
||||||
|
cachedReportedPos = 0;
|
||||||
|
cachedReportedPosDetails = { line: 1, column: 1, seenCR: false };
|
||||||
|
}
|
||||||
|
advanceCachedReportedPos();
|
||||||
|
}
|
||||||
|
|
||||||
|
return cachedReportedPosDetails;
|
||||||
|
}
|
||||||
|
|
||||||
function offset() {
|
function offset() {
|
||||||
return reportedPos;
|
return reportedPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
function line() {
|
function line() {
|
||||||
return computePosDetails(reportedPos).line;
|
return computeReportedPosDetails().line;
|
||||||
}
|
}
|
||||||
|
|
||||||
function column() {
|
function column() {
|
||||||
return computePosDetails(reportedPos).column;
|
return computeReportedPosDetails().column;
|
||||||
}
|
}
|
||||||
|
|
||||||
function matchFailed(failure) {
|
function matchFailed(failure) {
|
||||||
|
@ -2825,37 +2859,6 @@ module.exports = (function(){
|
||||||
return cleanExpected;
|
return cleanExpected;
|
||||||
}
|
}
|
||||||
|
|
||||||
function computePosDetails(pos) {
|
|
||||||
/*
|
|
||||||
* The first idea was to use |String.split| to break the input up to the
|
|
||||||
* error position along newlines and derive the line and column from
|
|
||||||
* there. However IE's |split| implementation is so broken that it was
|
|
||||||
* enough to prevent it.
|
|
||||||
*/
|
|
||||||
|
|
||||||
var line = 1;
|
|
||||||
var column = 1;
|
|
||||||
var seenCR = false;
|
|
||||||
|
|
||||||
for (var i = 0; i < pos; i++) {
|
|
||||||
var ch = input.charAt(i);
|
|
||||||
if (ch === "\n") {
|
|
||||||
if (!seenCR) { line++; }
|
|
||||||
column = 1;
|
|
||||||
seenCR = false;
|
|
||||||
} else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") {
|
|
||||||
line++;
|
|
||||||
column = 1;
|
|
||||||
seenCR = true;
|
|
||||||
} else {
|
|
||||||
column++;
|
|
||||||
seenCR = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return { line: line, column: column };
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
var utils = require("./utils");
|
var utils = require("./utils");
|
||||||
|
|
||||||
|
@ -2887,16 +2890,16 @@ module.exports = (function(){
|
||||||
* handle these states.
|
* handle these states.
|
||||||
*/
|
*/
|
||||||
if (result === null || pos !== input.length) {
|
if (result === null || pos !== input.length) {
|
||||||
var offset = Math.max(pos, rightmostFailuresPos);
|
reportedPos = Math.max(pos, rightmostFailuresPos);
|
||||||
var found = offset < input.length ? input.charAt(offset) : null;
|
var found = reportedPos < input.length ? input.charAt(reportedPos) : null;
|
||||||
var errorPosition = computePosDetails(Math.max(pos, rightmostFailuresPos));
|
var reportedPosDetails = computeReportedPosDetails();
|
||||||
|
|
||||||
throw new this.SyntaxError(
|
throw new this.SyntaxError(
|
||||||
cleanupExpected(rightmostFailuresExpected),
|
cleanupExpected(rightmostFailuresExpected),
|
||||||
found,
|
found,
|
||||||
offset,
|
reportedPos,
|
||||||
errorPosition.line,
|
reportedPosDetails.line,
|
||||||
errorPosition.column
|
reportedPosDetails.column
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue