Add ecma5 flag for codegen
This commit is contained in:
committed by
Richard van Velzen
parent
63c432f4fa
commit
54a783ba84
@@ -67,7 +67,8 @@ function OutputStream(options) {
|
|||||||
screw_ie8 : false,
|
screw_ie8 : false,
|
||||||
preamble : null,
|
preamble : null,
|
||||||
quote_style : 0,
|
quote_style : 0,
|
||||||
keep_quoted_props: false
|
keep_quoted_props: false,
|
||||||
|
ecma : 5,
|
||||||
}, true);
|
}, true);
|
||||||
|
|
||||||
var indentation = 0;
|
var indentation = 0;
|
||||||
@@ -80,7 +81,11 @@ function OutputStream(options) {
|
|||||||
return str.replace(/[\ud800-\udbff][\udc00-\udfff]|[\u0000-\u001f\u007f-\uffff]/g, function(ch) {
|
return str.replace(/[\ud800-\udbff][\udc00-\udfff]|[\u0000-\u001f\u007f-\uffff]/g, function(ch) {
|
||||||
var code = get_full_char_code(ch, 0).toString(16);
|
var code = get_full_char_code(ch, 0).toString(16);
|
||||||
|
|
||||||
if ((identifier && code.length === 1) || code.length > 4) {
|
if ((identifier && code.length === 1 && !options.es5) || code.length > 4) {
|
||||||
|
if (options.ecma < 6) {
|
||||||
|
return "\\u" + ch.charCodeAt(0).toString(16) + "\\u"
|
||||||
|
+ ch.charCodeAt(1).toString(16);
|
||||||
|
}
|
||||||
return "\\u{" + code + "}";
|
return "\\u{" + code + "}";
|
||||||
} else if (code.length <= 2 && !identifier) {
|
} else if (code.length <= 2 && !identifier) {
|
||||||
while (code.length < 2) code = "0" + code;
|
while (code.length < 2) code = "0" + code;
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ unicode_parse_variables: {
|
|||||||
}
|
}
|
||||||
|
|
||||||
unicode_escaped_identifier: {
|
unicode_escaped_identifier: {
|
||||||
|
beautify = {ecma: 6}
|
||||||
input: {
|
input: {
|
||||||
var \u{61} = "foo";
|
var \u{61} = "foo";
|
||||||
var \u{10000} = "bar";
|
var \u{10000} = "bar";
|
||||||
@@ -25,7 +26,7 @@ unicode_escaped_identifier: {
|
|||||||
}
|
}
|
||||||
|
|
||||||
unicode_identifier_ascii_only: {
|
unicode_identifier_ascii_only: {
|
||||||
beautify = {ascii_only: true}
|
beautify = {ascii_only: true, ecma: 6}
|
||||||
input: {
|
input: {
|
||||||
var \u{0061} = "hi";
|
var \u{0061} = "hi";
|
||||||
var bar = "h\u{0065}llo";
|
var bar = "h\u{0065}llo";
|
||||||
@@ -35,9 +36,67 @@ unicode_identifier_ascii_only: {
|
|||||||
}
|
}
|
||||||
|
|
||||||
unicode_string_literals: {
|
unicode_string_literals: {
|
||||||
beautify = {ascii_only: true}
|
beautify = {ascii_only: true, ecma: 6}
|
||||||
input: {
|
input: {
|
||||||
var a = "6 length unicode character: \u{101111}";
|
var a = "6 length unicode character: \u{101111}";
|
||||||
}
|
}
|
||||||
expect_exact: 'var a="6 length unicode character: \\u{101111}";'
|
expect_exact: 'var a="6 length unicode character: \\u{101111}";'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unicode_output_es5_surrogates: {
|
||||||
|
beautify = {ascii_only: true, ecma: 5}
|
||||||
|
input: {
|
||||||
|
var \u{10000} = "6 length unicode character: \u{10FFFF}";
|
||||||
|
}
|
||||||
|
expect_exact: 'var \\ud800\\udc00="6 length unicode character: \\udbff\\udfff";'
|
||||||
|
}
|
||||||
|
|
||||||
|
check_escape_style: {
|
||||||
|
beautify = {ascii_only: true, ecma: 6}
|
||||||
|
input: {
|
||||||
|
var a = "\x01";
|
||||||
|
var \ua0081 = "\x10"; // \u0081 only in ID_Continue
|
||||||
|
var \u0100 = "\u0100";
|
||||||
|
var \u1000 = "\u1000";
|
||||||
|
var \u{10000} = "\u{10000}";
|
||||||
|
var \u{2f800} = "\u{100000}";
|
||||||
|
}
|
||||||
|
expect_exact: 'var a="\\x01";var \\ua0081="\\x10";var \\u0100="\\u0100";var \\u1000="\\u1000";var \\u{10000}="\\u{10000}";var \\u{2f800}="\\u{100000}";'
|
||||||
|
}
|
||||||
|
|
||||||
|
check_escape_style_es5: {
|
||||||
|
beautify = {ascii_only: true, ecma: 5}
|
||||||
|
input: {
|
||||||
|
var a = "\x01";
|
||||||
|
var \ua0081 = "\x10"; // \u0081 only in ID_Continue
|
||||||
|
var \u0100 = "\u0100";
|
||||||
|
var \u1000 = "\u1000";
|
||||||
|
var \u{10000} = "\u{10000}";
|
||||||
|
var \u{2f800} = "\u{100000}";
|
||||||
|
}
|
||||||
|
expect_exact: 'var a="\\x01";var \\ua0081="\\x10";var \\u0100="\\u0100";var \\u1000="\\u1000";var \\ud800\\udc00="\\ud800\\udc00";var \\ud87e\\udc00="\\udbc0\\udc00";'
|
||||||
|
}
|
||||||
|
|
||||||
|
ID_continue_with_surrogate_pair: {
|
||||||
|
beautify = {ascii_only: true, ecma: 6}
|
||||||
|
input: {
|
||||||
|
var \u{2f800}\u{2f800}\u{2f800}\u{2f800} = "\u{100000}\u{100000}\u{100000}\u{100000}\u{100000}";
|
||||||
|
}
|
||||||
|
expect_exact: 'var \\u{2f800}\\u{2f800}\\u{2f800}\\u{2f800}="\\u{100000}\\u{100000}\\u{100000}\\u{100000}\\u{100000}";'
|
||||||
|
}
|
||||||
|
|
||||||
|
escape_non_escaped_identifier: {
|
||||||
|
beautify = {ascii_only: true, ecma: 6}
|
||||||
|
input: {
|
||||||
|
var µþ = "µþ";
|
||||||
|
}
|
||||||
|
expect_exact: 'var \\u00b5\\u00fe="\\xb5\\xfe";'
|
||||||
|
}
|
||||||
|
|
||||||
|
non_escape_2_non_escape: {
|
||||||
|
beautify = {ascii_only: false, ecma: 6}
|
||||||
|
input: {
|
||||||
|
var µþ = "µþ";
|
||||||
|
}
|
||||||
|
expect_exact: 'var µþ="µþ";'
|
||||||
|
}
|
||||||
@@ -126,7 +126,7 @@ describe("Unicode", function() {
|
|||||||
|
|
||||||
for (var i = 0; i < tests.length; i++) {
|
for (var i = 0; i < tests.length; i++) {
|
||||||
assert.strictEqual(uglify.minify(tests[i][0], {
|
assert.strictEqual(uglify.minify(tests[i][0], {
|
||||||
fromString: true, output: { ascii_only: true}
|
fromString: true, output: { ascii_only: true, ecma: 6}
|
||||||
}).code, tests[i][1]);
|
}).code, tests[i][1]);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user