aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2020-03-20 23:17:41 +0000
committerGitHub <noreply@github.com>2020-03-21 07:17:41 +0800
commitb39228892d9737421027ce2e9d944976ffaee654 (patch)
treef6fc31302146077dd4d9b17ff238fea10e2b0958
parentff72eaa3c3e0d93cc4f5b111ede223e1a0ebef48 (diff)
downloadtracifyjs-b39228892d9737421027ce2e9d944976ffaee654.tar.gz
tracifyjs-b39228892d9737421027ce2e9d944976ffaee654.zip
fix line accounting in multi-line strings (#3752)
fixes #3748
-rw-r--r--lib/parse.js12
-rw-r--r--test/mocha/sourcemaps.js16
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() {