Index: tools/jsmin.py |
diff --git a/tools/jsmin.py b/tools/jsmin.py |
index 250dea9d72bf2f6e2780c3368d7891d1efdc3278..cadc98b25897b30441236f790169adf4debe7d4d 100644 |
--- a/tools/jsmin.py |
+++ b/tools/jsmin.py |
@@ -100,6 +100,12 @@ class JavaScriptMinifier(object): |
The string that should replace the match in the rewritten program. |
""" |
matched_text = m.group(0) |
+ |
+ if matched_text.startswith("`") and matched_text.endswith("`"): |
+ return re.sub(r"\$\{([\w$%]+)\}", |
+ lambda m: '${' + self.FindNewName(m.group(1)) + '}', |
+ matched_text) |
+ |
if matched_text == "{": |
self.Push() |
return matched_text |
@@ -152,6 +158,9 @@ class JavaScriptMinifier(object): |
return self.map[var_name] |
if self.nesting == 0: |
return var_name |
+ # Do not rename arguments object. |
+ if var_name == 'arguments': |
+ return 'arguments' |
while True: |
identifier_first_char = self.identifier_counter % 52 |
identifier_second_char = self.identifier_counter // 52 |
@@ -184,6 +193,8 @@ class JavaScriptMinifier(object): |
return entire_match |
if re.match(r'".*"$', entire_match): |
return entire_match |
+ if re.match(r"`.*`$", entire_match): |
+ return entire_match |
if re.match(r"/.+/$", entire_match): |
return entire_match |
return replacement |
@@ -227,8 +238,10 @@ class JavaScriptMinifier(object): |
# This regexp can handle embedded backslash-escaped characters including |
# embedded backslash-escaped double quotes. |
double_quoted_string = r'"(?:[^"\\]|\\.)*"' |
- # A regexp that matches a literal string surrounded by 'double quotes'. |
+ # A regexp that matches a literal string surrounded by 'single quotes'. |
single_quoted_string = r"'(?:[^'\\]|\\.)*'" |
+ # A regexp that matches a template string |
+ template_string = r"`(?:[^'\\]|\\.)*`" |
# A regexp that matches a regexp literal surrounded by /slashes/. |
# Don't allow a regexp to have a ) before the first ( since that's a |
# syntax error and it's probably just two unrelated slashes. |
@@ -238,6 +251,7 @@ class JavaScriptMinifier(object): |
# Replace multiple spaces with a single space. |
line = re.sub("|".join([double_quoted_string, |
single_quoted_string, |
+ template_string, |
slash_quoted_regexp, |
"( )+"]), |
self.RemoveSpaces, |
@@ -246,6 +260,7 @@ class JavaScriptMinifier(object): |
# and after the space. % and $ are counted as identifier characters. |
line = re.sub("|".join([double_quoted_string, |
single_quoted_string, |
+ template_string, |
slash_quoted_regexp, |
r"(?<![a-zA-Z_0-9$%]) | (?![a-zA-Z_0-9$%])()"]), |
self.RemoveSpaces, |
@@ -269,6 +284,7 @@ class JavaScriptMinifier(object): |
variable_use_regexp = r"(?<![.\w$%])[\w$%]+" + block_trailing_colon |
line = re.sub("|".join([double_quoted_string, |
single_quoted_string, |
+ template_string, |
slash_quoted_regexp, |
r"\{", # Curly braces. |
r"\}", |