Merge branch 'master' into harmony-v3.3.8

This commit is contained in:
alexlamsl
2018-01-21 15:35:55 +08:00
26 changed files with 1071 additions and 211 deletions

View File

@@ -4314,3 +4314,103 @@ replace_all_var: {
}
expect_stdout: "PASS"
}
cascade_statement: {
options = {
collapse_vars: true,
}
input: {
function f1(a, b) {
var c;
if (a)
return c = b, c || a;
else
c = a, c(b);
}
function f2(a, b) {
var c;
while (a)
c = b, a = c + b;
do
throw c = a + b, c;
while (c);
}
function f3(a, b) {
for (; a < b; a++)
if (c = a, c && b)
var c = (c = b(a), c);
}
}
expect: {
function f1(a, b) {
var c;
if (a)
return (c = b) || a;
else
(c = a)(b);
}
function f2(a, b) {
var c;
while (a)
a = (c = b) + b;
do
throw c = a + b;
while (c);
}
function f3(a, b) {
for (; a < b; a++)
if ((c = a) && b)
var c = c = b(a);
}
}
}
cascade_forin: {
options = {
collapse_vars: true,
}
input: {
var a;
function f(b) {
return [ b, b, b ];
}
for (var c in a = console, f(a))
console.log(c);
}
expect: {
var a;
function f(b) {
return [ b, b, b ];
}
for (var c in f(a = console))
console.log(c);
}
expect_stdout: [
"0",
"1",
"2",
]
}
unsafe_builtin: {
options = {
collapse_vars: true,
pure_getters: "strict",
unsafe: true,
unused: true,
}
input: {
function f(a) {
var b = Math.abs(a);
return Math.pow(b, 2);
}
console.log(f(-1), f(2));
}
expect: {
function f(a) {
return Math.pow(Math.abs(a), 2);
}
console.log(f(-1), f(2));
}
expect_stdout: "1 4"
}

View File

@@ -1157,3 +1157,20 @@ issue_2749: {
}
expect_stdout: "PASS"
}
unsafe_builtin: {
options = {
side_effects: true,
unsafe: true,
}
input: {
(!w).constructor(x);
Math.abs(y);
[ 1, 2, z ].valueOf();
}
expect: {
w, x;
y;
z;
}
}

View File

@@ -1287,6 +1287,9 @@ issue_2231_1: {
console.log(Object.keys(void 0));
}
expect_stdout: true
expect_warnings: [
"WARN: Error evaluating Object.keys(void 0) [test/compress/evaluate.js:1191,20]",
]
}
issue_2231_2: {
@@ -1301,6 +1304,23 @@ issue_2231_2: {
console.log(Object.getOwnPropertyNames(null));
}
expect_stdout: true
expect_warnings: [
"WARN: Error evaluating Object.getOwnPropertyNames(null) [test/compress/evaluate.js:1208,20]",
]
}
issue_2231_3: {
options = {
evaluate: true,
unsafe: true,
}
input: {
console.log(Object.keys({ foo: "bar" })[0]);
}
expect: {
console.log("foo");
}
expect_stdout: "foo"
}
self_comparison_1: {
@@ -1433,3 +1453,17 @@ issue_2535_3: {
"WARN: Condition left of || always true [test/compress/evaluate.js:1414,20]",
]
}
issue_2822: {
options = {
evaluate: true,
unsafe: true,
}
input: {
console.log([ function() {}, "PASS", "FAIL" ][1]);
}
expect: {
console.log("PASS");
}
expect_stdout: "PASS"
}

View File

@@ -258,7 +258,7 @@ issue_203: {
options = {
keep_fargs: false,
side_effects: true,
unsafe_Func: true,
unsafe_Function: true,
unused: true,
}
input: {
@@ -2117,3 +2117,41 @@ issue_2737_2: {
}
expect_stdout: "PASS"
}
issue_2783: {
options = {
collapse_vars: true,
conditionals: true,
if_return: true,
inline: true,
reduce_vars: true,
unused: true,
}
input: {
(function() {
return g;
function f(a) {
var b = a.b;
if (b) return b;
return a;
}
function g(o, i) {
while (i--) {
console.log(f(o));
}
}
})()({ b: "PASS" }, 1);
}
expect: {
(function() {
return function(o,i) {
while (i--) console.log(f(o));
};
function f(a) {
var b = a.b;
return b || a;
}
})()({ b: "PASS" },1);
}
expect_stdout: "PASS"
}

View File

@@ -897,3 +897,25 @@ toplevel_var: {
}
expect_stdout: "3"
}
undefined_key: {
options = {
evaluate: true,
hoist_props: true,
join_vars: true,
passes: 4,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
var a, o = {};
o[a] = 1;
o.b = 2;
console.log(o[a] + o.b);
}
expect: {
console.log(3);
}
expect_stdout: "3"
}

View File

@@ -4,7 +4,7 @@ unsafe_undefined: {
options = {
conditionals: true,
if_return: true,
unsafe: true
unsafe_undefined: true,
}
mangle = {}
input: {
@@ -30,7 +30,7 @@ keep_fnames: {
options = {
conditionals: true,
if_return: true,
unsafe: true
unsafe_undefined: true,
}
mangle = {
keep_fnames: true

View File

@@ -61,7 +61,7 @@ unsafe_undefined: {
options = {
conditionals: true,
if_return: true,
unsafe: true,
unsafe_undefined: true,
}
mangle = {}
input: {

View File

@@ -84,12 +84,12 @@ numeric_literal: {
' 0: 0,',
' "-0": 1,',
' 42: 2,',
' "42": 3,',
' 42: 3,',
' 37: 4,',
' o: 5,',
' 1e42: 6,',
' b: 7,',
' "1e+42": 8',
' 1e42: 8',
'};',
'',
'console.log(obj[-0], obj[-""], obj["-0"]);',

View File

@@ -585,6 +585,25 @@ native_prototype: {
}
}
native_prototype_lhs: {
options = {
unsafe_proto: true,
}
input: {
console.log(function() {
Function.prototype.bar = "PASS";
return function() {};
}().bar);
}
expect: {
console.log(function() {
Function.prototype.bar = "PASS";
return function() {};
}().bar);
}
expect_stdout: "PASS"
}
accessor_boolean: {
input: {
var a = 1;
@@ -1466,7 +1485,7 @@ join_object_assignments_3: {
expect_stdout: "PASS"
}
join_object_assignments_4: {
join_object_assignments_return_1: {
options = {
join_vars: true,
}
@@ -1490,7 +1509,7 @@ join_object_assignments_4: {
expect_stdout: "foo"
}
join_object_assignments_5: {
join_object_assignments_return_2: {
options = {
join_vars: true,
}
@@ -1516,7 +1535,7 @@ join_object_assignments_5: {
expect_stdout: "bar"
}
join_object_assignments_6: {
join_object_assignments_return_3: {
options = {
join_vars: true,
}
@@ -1548,7 +1567,7 @@ join_object_assignments_6: {
]
}
join_object_assignments_7: {
join_object_assignments_for: {
options = {
join_vars: true,
}
@@ -1575,3 +1594,274 @@ join_object_assignments_7: {
"3",
]
}
join_object_assignments_if: {
options = {
join_vars: true,
}
input: {
console.log(function() {
var o = {};
if (o.a = "PASS") return o.a;
}())
}
expect: {
console.log(function() {
var o = { a: "PASS" };
if (o.a) return o.a;
}());
}
expect_stdout: "PASS"
}
join_object_assignments_forin: {
options = {
join_vars: true,
}
input: {
console.log(function() {
var o = {};
for (var a in o.a = "PASS", o)
return o[a];
}())
}
expect: {
console.log(function() {
var o = { a: "PASS" };
for (var a in o)
return o[a];
}());
}
expect_stdout: "PASS"
}
join_object_assignments_negative: {
options = {
evaluate: true,
join_vars: true,
properties: true,
}
input: {
var o = {};
o[0] = 0;
o[-0] = 1;
o[-1] = 2;
console.log(o[0], o[-0], o[-1]);
}
expect: {
var o = {
0: 0,
0: 1,
"-1": 2
};
console.log(o[0], o[-0], o[-1]);
}
expect_stdout: "1 1 2"
}
join_object_assignments_NaN_1: {
options = {
join_vars: true,
}
input: {
var o = {};
o[NaN] = 1;
o[0/0] = 2;
console.log(o[NaN], o[NaN]);
}
expect: {
var o = {};
o[NaN] = 1;
o[0/0] = 2;
console.log(o[NaN], o[NaN]);
}
expect_stdout: "2 2"
}
join_object_assignments_NaN_2: {
options = {
evaluate: true,
join_vars: true,
properties: true,
}
input: {
var o = {};
o[NaN] = 1;
o[0/0] = 2;
console.log(o[NaN], o[NaN]);
}
expect: {
var o = {
NaN: 1,
NaN: 2
};
console.log(o.NaN, o.NaN);
}
expect_stdout: "2 2"
}
join_object_assignments_null_0: {
options = {
join_vars: true,
}
input: {
var o = {};
o[null] = 1;
console.log(o[null]);
}
expect: {
var o = {};
o[null] = 1;
console.log(o[null]);
}
expect_stdout: "1"
}
join_object_assignments_null_1: {
options = {
evaluate: true,
join_vars: true,
properties: true,
}
input: {
var o = {};
o[null] = 1;
console.log(o[null]);
}
expect: {
var o = {
null: 1
};
console.log(o.null);
}
expect_stdout: "1"
}
join_object_assignments_void_0: {
options = {
evaluate: true,
join_vars: true,
}
input: {
var o = {};
o[void 0] = 1;
console.log(o[void 0]);
}
expect: {
var o = {
undefined: 1
};
console.log(o[void 0]);
}
expect_stdout: "1"
}
join_object_assignments_undefined_1: {
options = {
join_vars: true,
}
input: {
var o = {};
o[undefined] = 1;
console.log(o[undefined]);
}
expect: {
var o = {};
o[void 0] = 1;
console.log(o[void 0]);
}
expect_stdout: "1"
}
join_object_assignments_undefined_2: {
options = {
evaluate: true,
join_vars: true,
properties: true,
}
input: {
var o = {};
o[undefined] = 1;
console.log(o[undefined]);
}
expect: {
var o = {
undefined : 1
};
console.log(o[void 0]);
}
expect_stdout: "1"
}
join_object_assignments_Infinity: {
options = {
evaluate: true,
join_vars: true,
properties: true,
}
input: {
var o = {};
o[Infinity] = 1;
o[1/0] = 2;
o[-Infinity] = 3;
o[-1/0] = 4;
console.log(o[Infinity], o[1/0], o[-Infinity], o[-1/0]);
}
expect: {
var o = {
Infinity: 1,
Infinity: 2,
"-Infinity": 3,
"-Infinity": 4
};
console.log(o[1/0], o[1/0], o[-1/0], o[-1/0]);
}
expect_stdout: "2 2 4 4"
}
join_object_assignments_regex: {
options = {
evaluate: true,
join_vars: true,
properties: true,
}
input: {
var o = {};
o[/rx/] = 1;
console.log(o[/rx/]);
}
expect: {
var o = {
"/rx/": 1
};
console.log(o[/rx/]);
}
expect_stdout: "1"
}
issue_2816: {
options = {
join_vars: true,
}
input: {
"use strict";
var o = {
a: 1
};
o.b = 2;
o.a = 3;
o.c = 4;
console.log(o.a, o.b, o.c);
}
expect: {
"use strict";
var o = {
a: 1,
b: 2
};
o.a = 3;
o.c = 4;
console.log(o.a, o.b, o.c);
}
expect_stdout: "3 2 4"
}

View File

@@ -5892,3 +5892,61 @@ issue_2774: {
}
expect_stdout: "undefined"
}
issue_2799_1: {
options = {
reduce_funcs: true,
reduce_vars: true,
unused: true,
}
input: {
console.log(function() {
return f;
function f(n) {
function g(i) {
return i && i + g(i - 1);
}
function h(j) {
return g(j);
}
return h(n);
}
}()(5));
}
expect: {
console.log(function() {
return function(n) {
return function(j) {
return function g(i) {
return i && i + g(i - 1);
}(j);
}(n);
}
}()(5));
}
expect_stdout: "15"
}
issue_2799_2: {
options = {
reduce_vars: true,
unsafe_proto: true,
unused: true,
}
input: {
(function() {
function foo() {
Function.prototype.call.apply(console.log, [ null, "PASS" ]);
}
foo();
})();
}
expect: {
(function() {
(function() {
(function() {}).call.apply(console.log, [ null, "PASS" ]);
})();
})();
}
expect_stdout: "PASS"
}

View File

@@ -288,7 +288,7 @@ unsafe_undefined: {
if_return: true,
sequences: true,
side_effects: true,
unsafe: true,
unsafe_undefined: true,
}
input: {
function f(undefined) {
@@ -883,3 +883,21 @@ for_init_var: {
}
expect_stdout: "PASS"
}
forin: {
options = {
sequences: true,
}
input: {
var o = [];
o.push("PASS");
for (var a in o)
console.log(o[a]);
}
expect: {
var o = [];
for (var a in o.push("PASS"), o)
console.log(o[a]);
}
expect_stdout: "PASS"
}