return this.tail_node().is_string(compressor);
});
def(AST_String, return_true);
- def(AST_Sub, function(compressor) {
- return this.expression.is_string(compressor) && this.property instanceof AST_Number;
- });
def(AST_SymbolRef, function(compressor) {
var fixed = this.fixed_value();
if (!fixed) return false;
val = global_objs[exp.name];
} else {
val = exp._eval(compressor, cached, depth + 1);
- if (!val || val === exp || !HOP(val, key)) return this;
+ if (!val || val === exp) return this;
+ if (typeof val == "object" && !HOP(val, key)) return this;
if (typeof val == "function") switch (key) {
case "name":
return val.node.name ? val.node.name.name : "";
}
expect: {
console.log(
- true.a,
+ void 0,
false.a,
null.a,
(void 0).a
o + 1,
2,
o.b + 1,
- 1..b + 1
+ NaN
);
}
expect_stdout: true
o + 1,
2,
o.b + 1,
- 1..b + 1
+ NaN
);
}
expect_stdout: true
2,
2,
({0:1})[1] + 1,
- 1[1] + 1,
- 1["1"] + 1
+ NaN,
+ NaN
);
}
expect_stdout: true
2,
2,
({2.72:1})[3.14] + 1,
- 1[3.14] + 1,
- 1["3.14"] + 1
+ NaN,
+ NaN
);
}
expect_stdout: true
}
expect: {
console.log(
- "1234".a + 1,
- "1234"["a"] + 1,
- "1234"[3.14] + 1
+ NaN,
+ NaN,
+ NaN
);
}
- expect_stdout: true
+ expect_stdout: "NaN NaN NaN"
}
prototype_function: {
}
expect_stdout: "PASS"
}
+
+issue_3387_1: {
+ options = {
+ evaluate: true,
+ }
+ input: {
+ console.log(1 + (2 + "3"[4]));
+ }
+ expect: {
+ console.log(1 + (2 + "3"[4]));
+ }
+ expect_stdout: "NaN"
+}
+
+issue_3387_2: {
+ options = {
+ evaluate: true,
+ unsafe: true,
+ }
+ input: {
+ console.log(1 + (2 + "3"[4]));
+ }
+ expect: {
+ console.log(NaN);
+ }
+ expect_stdout: "NaN"
+}
unused: true,
}
input: {
- function f0(){
- var a = {
- b:1
- };
+ function f0() {
+ var a = { b: 1 };
console.log(a.b + 3);
}
-
- function f1(){
+ function f1() {
var a = {
- b:{
- c:1
- },
- d:2
+ b: { c: 1 },
+ d: 2
};
console.log(a.b + 3, a.d + 4, a.b.c + 5, a.d.c + 6);
}
+ f0();
+ f1();
}
expect: {
- function f0(){
+ function f0() {
console.log(4);
}
-
- function f1(){
+ function f1() {
var a = {
- b:{
- c:1
- },
- d:2
+ b: { c: 1 },
+ d: 2
};
- console.log(a.b + 3, 6, 6, 2..c + 6);
+ console.log(a.b + 3, 6, 6, NaN);
}
+ f0();
+ f1();
}
+ expect_stdout: true
}
unsafe_evaluate_side_effect_free_1: {