diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2020-03-20 23:17:41 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-21 07:17:41 +0800 |
commit | b39228892d9737421027ce2e9d944976ffaee654 (patch) | |
tree | f6fc31302146077dd4d9b17ff238fea10e2b0958 | |
parent | ff72eaa3c3e0d93cc4f5b111ede223e1a0ebef48 (diff) | |
download | tracifyjs-b39228892d9737421027ce2e9d944976ffaee654.tar.gz tracifyjs-b39228892d9737421027ce2e9d944976ffaee654.zip |
fix line accounting in multi-line strings (#3752)
fixes #3748
-rw-r--r-- | lib/parse.js | 12 | ||||
-rw-r--r-- | test/mocha/sourcemaps.js | 16 |
2 files changed, 22 insertions, 6 deletions
diff --git a/lib/parse.js b/lib/parse.js index 270af9b4..a04533a4 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -241,16 +241,16 @@ function tokenizer($TEXT, filename, html5_comments, shebang) { if (signal_eof && !ch) throw EX_EOF; if (NEWLINE_CHARS[ch]) { - S.newline_before = S.newline_before || !in_string; - ++S.line; S.col = 0; - if (!in_string && ch == "\r" && peek() == "\n") { - // treat a \r\n sequence as a single \n - ++S.pos; + S.line++; + if (!in_string) S.newline_before = true; + if (ch == "\r" && peek() == "\n") { + // treat `\r\n` as `\n` + S.pos++; ch = "\n"; } } else { - ++S.col; + S.col++; } return ch; } diff --git a/test/mocha/sourcemaps.js b/test/mocha/sourcemaps.js index 8457c865..7b1c70ff 100644 --- a/test/mocha/sourcemaps.js +++ b/test/mocha/sourcemaps.js @@ -89,6 +89,22 @@ describe("sourcemaps", function() { assert.strictEqual(result.code, code); assert.strictEqual(result.map, '{"version":3,"sources":["0"],"names":["console","log"],"mappings":"AAAAA,QAAQC,IAAI","sourceRoot":"//foo.bar/"}'); }); + it("Should produce same source map with DOS or UNIX line endings", function() { + var code = [ + 'console.log("\\', + 'hello",', + '"world");', + ]; + var dos = UglifyJS.minify(code.join("\r\n"), { + sourceMap: true, + }); + if (dos.error) throw dos.error; + var unix = UglifyJS.minify(code.join("\n"), { + sourceMap: true, + }); + if (unix.error) throw unix.error; + assert.strictEqual(dos.map, unix.map); + }); describe("inSourceMap", function() { it("Should read the given string filename correctly when sourceMapIncludeSources is enabled", function() { |