if (def.single_use == "m") return false;
var safe = tw.safe_ids[def.id];
if (safe) {
- if (!HOP(tw.safe_ids, def.id)) safe.read = safe.read && safe.read !== tw.safe_ids ? true : tw.safe_ids;
+ var in_order = HOP(tw.safe_ids, def.id);
+ if (!in_order) safe.read = safe.read && safe.read !== tw.safe_ids ? true : tw.safe_ids;
if (def.fixed == null) {
if (is_arguments(def)) return false;
if (def.global && def.name == "arguments") return false;
tw.loop_ids[def.id] = null;
def.fixed = make_node(AST_Undefined, def.orig[0]);
+ if (in_order) delete def.safe_ids;
return true;
}
return !safe.assign || safe.assign === tw.safe_ids;
expect_stdout: "42"
}
-issue_4235: {
+issue_4235_1: {
options = {
inline: true,
reduce_vars: true,
}
expect: {
void function() {
- var f;
- console.log(f);
+ var f = console.log(f);
}();
}
expect_stdout: "undefined"
}
+issue_4235_2: {
+ options = {
+ inline: true,
+ passes: 2,
+ reduce_vars: true,
+ side_effects: true,
+ unused: true,
+ varify: true,
+ }
+ input: {
+ (function() {
+ {
+ const f = 0;
+ }
+ (function f() {
+ var f = console.log(f);
+ })();
+ })();
+ }
+ expect: {
+ console.log(void 0);
+ }
+ expect_stdout: "undefined"
+}
+
issue_4404: {
options = {
pure_getters: "strict",
}
}
-issue_4487: {
+issue_4487_1: {
options = {
functions: true,
hoist_vars: true,
}
expect: {
function a() {
- var f;
- console.log(typeof f);
+ var f = console.log(typeof f);
}
a();
}
expect_stdout: "undefined"
}
+issue_4487_2: {
+ options = {
+ functions: true,
+ hoist_vars: true,
+ keep_fnames: true,
+ passes: 2,
+ reduce_vars: true,
+ toplevel: true,
+ unused: true,
+ }
+ input: {
+ var a = function f() {
+ var f = console.log(typeof f);
+ };
+ var b = a();
+ }
+ expect: {
+ (function a() {
+ console.log(typeof void 0);
+ })();
+ }
+ expect_stdout: "undefined"
+}
+
issue_4489: {
options = {
collapse_vars: true,