var name = var_def.name;
append_var(decls, expressions, name, var_def.value);
if (in_loop) {
- var def = name.definition();
+ var def = fn.variables.get(name.name);
+ if (def.orig[0] instanceof AST_SymbolFunarg) continue;
var sym = make_node(AST_SymbolRef, name, name);
def.references.push(sym);
expressions.splice(pos++, 0, make_node(AST_Assign, var_def, {
}
}
}
+
+issue_3016_1: {
+ options = {
+ inline: true,
+ toplevel: true,
+ }
+ input: {
+ var b = 1;
+ do {
+ (function(a) {
+ return a[b];
+ var a;
+ })(3);
+ } while (0);
+ console.log(b);
+ }
+ expect: {
+ var b = 1;
+ do {
+ a = 3,
+ a[b];
+ } while(0);
+ var a;
+ console.log(b);
+ }
+ expect_stdout: "1"
+}
+
+issue_3016_2: {
+ options = {
+ dead_code: true,
+ inline: true,
+ toplevel: true,
+ }
+ input: {
+ var b = 1;
+ do {
+ (function(a) {
+ return a[b];
+ try {
+ a = 2;
+ } catch (a) {
+ var a;
+ }
+ })(3);
+ } while (0);
+ console.log(b);
+ }
+ expect: {
+ var b = 1;
+ do {
+ a = 3,
+ a[b];
+ } while(0);
+ var a;
+ console.log(b);
+ }
+ expect_stdout: "1"
+}
+
+issue_3016_2_ie8: {
+ options = {
+ dead_code: true,
+ ie8: true,
+ inline: true,
+ toplevel: true,
+ }
+ input: {
+ var b = 1;
+ do {
+ (function(a) {
+ return a[b];
+ try {
+ a = 2;
+ } catch (a) {
+ var a;
+ }
+ })(3);
+ } while (0);
+ console.log(b);
+ }
+ expect: {
+ var b = 1;
+ do {
+ a = 3,
+ a[b];
+ } while(0);
+ var a;
+ console.log(b);
+ }
+ expect_stdout: "1"
+}
+
+issue_3016_3: {
+ options = {
+ dead_code: true,
+ inline: true,
+ toplevel: true,
+ }
+ input: {
+ var b = 1;
+ do {
+ console.log(function() {
+ return a ? "FAIL" : a = "PASS";
+ try {
+ a = 2;
+ } catch (a) {
+ var a;
+ }
+ }());
+ } while (b--);
+ }
+ expect: {
+ var b = 1;
+ do {
+ console.log((a = void 0, a ? "FAIL" : a = "PASS"));
+ } while(b--);
+ var a;
+ }
+ expect_stdout: [
+ "PASS",
+ "PASS",
+ ]
+}
+
+issue_3016_3_ie8: {
+ options = {
+ dead_code: true,
+ ie8: true,
+ inline: true,
+ toplevel: true,
+ }
+ input: {
+ var b = 1;
+ do {
+ console.log(function() {
+ return a ? "FAIL" : a = "PASS";
+ try {
+ a = 2;
+ } catch (a) {
+ var a;
+ }
+ }());
+ } while (b--);
+ }
+ expect: {
+ var b = 1;
+ do {
+ console.log((a = void 0, a ? "FAIL" : a = "PASS"));
+ } while(b--);
+ var a;
+ }
+ expect_stdout: [
+ "PASS",
+ "PASS",
+ ]
+}