Fix infinite loop when skipping statements, see #167

This commit is contained in:
dcodeIO 2018-07-10 17:38:03 +02:00
parent cc72d02542
commit 585d246165
7 changed files with 14 additions and 14 deletions

View File

@ -21,6 +21,10 @@ const colorsUtil = require("./util/colors");
const optionsUtil = require("./util/options");
const EOL = process.platform === "win32" ? "\r\n" : "\n";
// Emscripten adds an `uncaughtException` listener to Binaryen that results in an additional
// useless code fragment on top of an actual error. suppress this:
if (process.removeAllListeners) process.removeAllListeners("uncaughtException");
// Use distribution files if present, otherwise run the sources directly
var assemblyscript, isDev = false;
(() => {
@ -38,9 +42,6 @@ var assemblyscript, isDev = false;
} catch (e) {
// combine both errors that lead us here
e.stack = e_ts.stack + "\n---\n" + e.stack;
// Emscripten adds an `uncaughtException` listener to Binaryen that results in an additional
// useless code fragment on top of the actual error. suppress this:
if (process.removeAllListeners) process.removeAllListeners("uncaughtException");
throw e;
}
}

2
dist/asc.js vendored

File diff suppressed because one or more lines are too long

2
dist/asc.js.map vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -546,13 +546,11 @@ export class Tokenizer extends DiagnosticEmitter {
let c = text.charCodeAt(this.pos);
switch (c) {
case CharCode.CARRIAGERETURN: {
if (
if (!(
++this.pos < this.end &&
text.charCodeAt(this.pos) == CharCode.LINEFEED
) {
++this.pos;
}
break;
)) break;
// otherwise fall-through
}
case CharCode.LINEFEED:
case CharCode.TAB:
@ -960,8 +958,8 @@ export class Tokenizer extends DiagnosticEmitter {
this.nextTokenPos = this.tokenPos;
if (checkOnNewLine) {
this.nextTokenOnNewLine = false;
while (--this.tokenPos > posBefore) {
if (isLineBreak(text.charCodeAt(this.tokenPos))) {
for (let pos = posBefore, end = this.nextTokenPos; pos < end; ++pos) {
if (isLineBreak(text.charCodeAt(pos))) {
this.nextTokenOnNewLine = true;
break;
}

View File

@ -2,6 +2,7 @@
/(abc)\//;
var re = /(abc)\//ig;
var noRe = !/(abc)\//i;
b / ig;
/(abc)\//iig;
/(abc)\//iX;
false && /abc/gX.test(someString) || true;