Skip to content

Commit

Permalink
Emit only ascii (#1191)
Browse files Browse the repository at this point in the history
swc_ecma_codegen:
 - Emit only ascii characters. (#1187, #1188)
  • Loading branch information
kdy1 authored Oct 29, 2020
1 parent b2aec35 commit 32b3bbd
Show file tree
Hide file tree
Showing 42 changed files with 76 additions and 63 deletions.
2 changes: 1 addition & 1 deletion bundler/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ edition = "2018"
license = "Apache-2.0/MIT"
name = "swc_bundler"
repository = "https://github.com/swc-project/swc.git"
version = "0.13.0"
version = "0.13.1"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[features]
Expand Down
4 changes: 1 addition & 3 deletions bundler/src/bundler/chunk/export.rs
Original file line number Diff line number Diff line change
Expand Up @@ -215,9 +215,7 @@ where
let local = local.replace_mark(info.mark());
(local.into_ident(), alias.into_ident())
}
Specifier::Namespace { local, all } => {
unimplemented!("namespaced re-export: local={:?}, all={}", local, all)
}
Specifier::Namespace { .. } => continue,
};

add_to.push((imported, exported));
Expand Down
1 change: 1 addition & 0 deletions bundler/tests/fixture/deno-8148/test-1/input/a.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export class A { }
1 change: 1 addition & 0 deletions bundler/tests/fixture/deno-8148/test-1/input/entry.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * as foo from './a';
8 changes: 8 additions & 0 deletions bundler/tests/fixture/deno-8148/test-1/output/entry.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
const foo = function() {
class A {
}
return {
A
};
}();
export { foo };
1 change: 1 addition & 0 deletions bundler/tests/fixture/deno-8148/test-2/input/a.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export async function foo() { }
1 change: 1 addition & 0 deletions bundler/tests/fixture/deno-8148/test-2/input/entry.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * as foo from './a';
8 changes: 8 additions & 0 deletions bundler/tests/fixture/deno-8148/test-2/output/entry.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
const foo = function() {
async function foo1() {
}
return {
foo: foo1
};
}();
export { foo };
1 change: 1 addition & 0 deletions bundler/tests/fixture/deno-8148/test-3/input/a.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const [a, b, c] = [1, 2, 3]
1 change: 1 addition & 0 deletions bundler/tests/fixture/deno-8148/test-3/input/entry.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * as foo from './a';
13 changes: 13 additions & 0 deletions bundler/tests/fixture/deno-8148/test-3/output/entry.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
const foo = function() {
const [a, b, c] = [
1,
2,
3
];
return {
a,
b,
c
};
}();
export { foo };
6 changes: 3 additions & 3 deletions ecmascript/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ edition = "2018"
license = "Apache-2.0/MIT"
name = "swc_ecmascript"
repository = "https://github.com/swc-project/swc.git"
version = "0.12.0"
version = "0.12.1"

[features]
codegen = ["swc_ecma_codegen"]
Expand All @@ -21,9 +21,9 @@ react = ["swc_ecma_transforms", "swc_ecma_transforms/react"]

[dependencies]
swc_ecma_ast = {version = "0.33.0", path = "./ast"}
swc_ecma_codegen = {version = "0.39.0", path = "./codegen", optional = true}
swc_ecma_codegen = {version = "0.39.1", path = "./codegen", optional = true}
swc_ecma_dep_graph = {version = "0.7.0", path = "./dep-graph", optional = true}
swc_ecma_parser = {version = "0.41.0", path = "./parser", optional = true}
swc_ecma_parser = {version = "0.41.1", path = "./parser", optional = true}
swc_ecma_transforms = {version = "0.28.0", path = "./transforms", optional = true}
swc_ecma_utils = {version = "0.23.0", path = "./utils", optional = true}
swc_ecma_visit = {version = "0.19.1", path = "./visit", optional = true}
Expand Down
2 changes: 1 addition & 1 deletion ecmascript/codegen/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ include = ["Cargo.toml", "src/**/*.rs"]
license = "Apache-2.0/MIT"
name = "swc_ecma_codegen"
repository = "https://github.com/swc-project/swc.git"
version = "0.39.0"
version = "0.39.1"

[dependencies]
bitflags = "1"
Expand Down
27 changes: 3 additions & 24 deletions ecmascript/codegen/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -397,13 +397,11 @@ impl<'a> Emitter<'a> {

if single_quote {
punct!("'");
self.wr
.write_str_lit(node.span, &value.replace("'", "\\'"))?;
self.wr.write_str_lit(node.span, &value)?;
punct!("'");
} else {
punct!("\"");
self.wr
.write_str_lit(node.span, &value.replace("\"", "\\\""))?;
self.wr.write_str_lit(node.span, &value)?;
punct!("\"");
}
}
Expand Down Expand Up @@ -2441,26 +2439,7 @@ fn escape(s: &str) -> Cow<str> {
// let ac = AhoCorasick::new(patterns);
//
// Cow::Owned(ac.replace_all(s, replace_with))
Cow::Owned(
s.replace("\\", "\\\\")
.replace('\u{0008}', "\\b")
.replace('\u{000C}', "\\f")
.replace("\n", "\\n")
.replace("\r", "\\r")
.replace("\t", "\\t")
.replace('\u{000B}', "\\v")
.replace("\00", "\\x000")
.replace("\01", "\\x001")
.replace("\02", "\\x002")
.replace("\03", "\\x003")
.replace("\04", "\\x004")
.replace("\05", "\\x005")
.replace("\06", "\\x006")
.replace("\07", "\\x007")
.replace("\08", "\\x008")
.replace("\09", "\\x009")
.replace("\0", "\\0"),
)
Cow::Owned(s.escape_default().to_string())
}

#[cold]
Expand Down
9 changes: 5 additions & 4 deletions ecmascript/codegen/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ pub(crate) fn assert_pretty(from: &str, to: &str) {
assert_eq!(DebugUsingDisplay(&out.trim()), DebugUsingDisplay(to),);
}

#[track_caller]
fn test_from_to(from: &str, expected: &str) {
let out = parse_then_emit(from, Default::default(), Syntax::default());

Expand Down Expand Up @@ -166,10 +167,10 @@ fn no_octal_escape() {
'\x000';
'\x001';
'\x009'"#,
r#"'\0a';
'\x000';
'\x001';
'\x009';"#,
r#"'\u{0}a';
'\u{0}0';
'\u{0}1';
'\u{0}9';"#,
);
}

Expand Down
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/0b1fc7208759253b.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/20644d335e3cd008.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
"HelloÊWorld";
"Hello\u{ca}World";
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/20aca21e32bf7772.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
('􏿿');
('\u{10ffff}');
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/3990bb94b19b1071.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
('');
('\u{1}');
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/3ae4f46daa688c58.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
'use strict';
('\0');
('\u{0}');
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/3d2ab39608730a47.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
'use strict';
('\0x');
('\u{0}x');
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/3e48826018d23c85.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
('a');
('\u{5}a');
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/4672c2ef688237c9.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
"\n\r\t\v\b\f\\'\"\0";
"\n\r\t\u{b}\u{8}\u{c}\\\'\"\u{0}";
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/4a0d9236bc523b77.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
('ø');
('\u{f8}');
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/4fee4ac53bdfd7f7.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
"Hello\0World";
"Hello\u{0}World";
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/5b146261dda66d63.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
('');
('\u{202a}');
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/664b0da1dd015106.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
a["b"] = "c";
a["if"] = "if";
a["*"] = "d";
a[""] = "e";
a["\u{eb3}"] = "e";
a[""] = "f";
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/78e1b8a4f3318967.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
"煎茶";
"\u{714e}\u{8336}";
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/7b514406528ff126.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
"HelloWorld";
"Hello\u{2}World";
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/7c03e5eb6a9f6f1a.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
function a() {
'use strict';
"\0";
"\u{0}";
}
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/84f901eb37273117.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
('\0');
('\u{0}');
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/8e3f0660b32fbfd2.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
('a');
('\u{7}a');
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/b5cf21a87ec272d1.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
('');
('\u{1}');
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/c7e5fba8bf3854cd.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
(function() {
'use strict';
'\0';
'\u{0}';
}());
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/cb095c303f88cd0b.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
('‰1');
('\u{89}1');
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/cf0eb6e6c4317c33.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
('ø');
('\u{f8}');
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/d81d71f4121e3193.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
('\0');
('\u{0}');
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/e5a7d56b798ec7e6.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
a("\v");
a("\u{b}");
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/e9682c37a1a959e1.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
"𠮷野家";
"\u{20bb7}\u{91ce}\u{5bb6}";
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/ed0783c35e43032b.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
a["b"] = "c";
a["if"] = "if";
a["*"] = "d";
a[""] = "e";
a["\u{eb3}"] = "e";
a[""] = "f";
a["1_1"] = "b";
2 changes: 1 addition & 1 deletion ecmascript/codegen/tests/references/fa736f4b0cf19c0c.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
"HelloWorld";
"Hello\u{1}World";
2 changes: 1 addition & 1 deletion ecmascript/parser/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ include = ["Cargo.toml", "src/**/*.rs", "examples/**/*.rs"]
license = "Apache-2.0/MIT"
name = "swc_ecma_parser"
repository = "https://github.com/swc-project/swc.git"
version = "0.41.0"
version = "0.41.1"

[features]
default = []
Expand Down

0 comments on commit 32b3bbd

Please sign in to comment.