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 reportedPos = 0;
|
||||
var cachedReportedPos = 0;
|
||||
var cachedReportedPosDetails = { line: 1, column: 1, seenCR: false };
|
||||
var reportFailures = 0;
|
||||
var rightmostFailuresPos = 0;
|
||||
var rightmostFailuresExpected = [];
|
||||
|
@ -92,16 +94,48 @@ module.exports = (function(){
|
|||
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() {
|
||||
return reportedPos;
|
||||
}
|
||||
|
||||
function line() {
|
||||
return computePosDetails(reportedPos).line;
|
||||
return computeReportedPosDetails().line;
|
||||
}
|
||||
|
||||
function column() {
|
||||
return computePosDetails(reportedPos).column;
|
||||
return computeReportedPosDetails().column;
|
||||
}
|
||||
|
||||
function matchFailed(failure) {
|
||||
|
@ -2825,37 +2859,6 @@ module.exports = (function(){
|
|||
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");
|
||||
|
||||
|
@ -2887,16 +2890,16 @@ module.exports = (function(){
|
|||
* handle these states.
|
||||
*/
|
||||
if (result === null || pos !== input.length) {
|
||||
var offset = Math.max(pos, rightmostFailuresPos);
|
||||
var found = offset < input.length ? input.charAt(offset) : null;
|
||||
var errorPosition = computePosDetails(Math.max(pos, rightmostFailuresPos));
|
||||
reportedPos = Math.max(pos, rightmostFailuresPos);
|
||||
var found = reportedPos < input.length ? input.charAt(reportedPos) : null;
|
||||
var reportedPosDetails = computeReportedPosDetails();
|
||||
|
||||
throw new this.SyntaxError(
|
||||
cleanupExpected(rightmostFailuresExpected),
|
||||
found,
|
||||
offset,
|
||||
errorPosition.line,
|
||||
errorPosition.column
|
||||
reportedPos,
|
||||
reportedPosDetails.line,
|
||||
reportedPosDetails.column
|
||||
);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue